code: def _iter_log_inner(debug):
      
      if debug:
          print('Generating ChangeLog')
  
      changelog = run('git log --oneline --decorate', hide=True).stdout.strip().decode('utf-8', 'replace')
      for line in changelog.split('\n'):
          line_parts = line.split()
          if len(line_parts) < 2:
              continue
          # Tags are in a list contained in ()'s. If a commit
          # subject that is tagged happens to have ()'s in it
          # this will fail
          if line_parts[1].startswith('(') and ')' in line:
              msg = line.split(')')[1].strip()
          else:
              msg = ' '.join(line_parts[1:])
  
          if 'tag:' in line:
              tags = set([
                  tag.split(',')[0]
                  for tag in line.split(')')[0].split('tag: ')[1:]])
          else:
              tags = set()
  
          yield line_parts[0], tags, msg
docs: Iterate over --oneline log entries.
  
      This parses the output intro a structured form but does not apply
      presentation logic to the output - making it suitable for different
      uses.
  
      :return: An iterator of (hash, tags_set, 1st_line) tuples.