def func(parser, options, args): """Show commit log and diff """ if options.applied: patches = crt_series.get_applied() elif options.unapplied: patches = crt_series.get_unapplied() elif len(args) == 0: patches = ['HEAD'] elif '..' in ' '.join(args): # patch ranges applied = crt_series.get_applied() unapplied = crt_series.get_unapplied() patches = parse_patches(args, applied + unapplied + \ crt_series.get_hidden(), len(applied)) else: # individual patches or commit ids patches = args if not options.stat: options.diff_flags.extend(color_diff_flags()) commit_ids = [git_id(crt_series, patch) for patch in patches] commit_str = '\n'.join([ git.pretty_commit(commit_id, flags=options.diff_flags) for commit_id in commit_ids ]) if options.stat: commit_str = gitlib.diffstat(commit_str) if commit_str: pager(commit_str)
def func(parser, options, args): """Show commit log and diff """ if options.applied: patches = crt_series.get_applied() elif options.unapplied: patches = crt_series.get_unapplied() elif len(args) == 0: patches = ['HEAD'] elif '..' in ' '.join(args): # patch ranges applied = crt_series.get_applied() unapplied = crt_series.get_unapplied() patches = parse_patches(args, applied + unapplied + \ crt_series.get_hidden(), len(applied)) else: # individual patches or commit ids patches = args if not options.stat: options.diff_flags.extend(color_diff_flags()) commit_ids = [git_id(crt_series, patch) for patch in patches] commit_str = '\n'.join([git.pretty_commit(commit_id, flags = options.diff_flags) for commit_id in commit_ids]) if options.stat: commit_str = gitlib.diffstat(commit_str) if commit_str: pager(commit_str)
def func(parser, options, args): """Show the tree diff """ args = git.ls_files(args) directory.cd_to_topdir() if options.revs: rev_list = options.revs.split('..') rev_list_len = len(rev_list) if rev_list_len == 1: rev1 = rev_list[0] rev2 = None elif rev_list_len == 2: rev1 = rev_list[0] rev2 = rev_list[1] else: parser.error('incorrect parameters to -r') else: rev1 = 'HEAD' rev2 = None if not options.stat: options.diff_flags.extend(color_diff_flags()) diff_str = git.diff(args, rev1 and git_id(crt_series, rev1), rev2 and git_id(crt_series, rev2), diff_flags=options.diff_flags) if options.stat: out.stdout_raw(gitlib.diffstat(diff_str) + '\n') else: if diff_str: pager(diff_str)
def func(parser, options, args): """Show the tree diff """ args = git.ls_files(args) directory.cd_to_topdir() if options.revs: rev_list = options.revs.split('..') rev_list_len = len(rev_list) if rev_list_len == 1: rev1 = rev_list[0] rev2 = None elif rev_list_len == 2: rev1 = rev_list[0] rev2 = rev_list[1] else: parser.error('incorrect parameters to -r') else: rev1 = 'HEAD' rev2 = None if not options.stat: options.diff_flags.extend(color_diff_flags()) diff_str = git.diff(args, rev1 and git_id(crt_series, rev1), rev2 and git_id(crt_series, rev2), diff_flags = options.diff_flags) if options.stat: out.stdout_raw(gitlib.diffstat(diff_str) + '\n') else: if diff_str: pager(diff_str)
def func(parser, options, args): """Show commit log and diff """ if options.applied: patches = crt_series.get_applied() elif options.unapplied: patches = crt_series.get_unapplied() elif len(args) == 0: patches = ['HEAD'] elif '..' in ' '.join(args): # patch ranges applied = crt_series.get_applied() unapplied = crt_series.get_unapplied() patches = parse_patches(args, applied + unapplied + \ crt_series.get_hidden(), len(applied)) else: # individual patches or commit ids patches = args if not options.stat: options.diff_flags.extend(color_diff_flags()) commit_ids = [git_id(crt_series, patch) for patch in patches] commit_bytes = b'\n'.join( (Run('git', 'show', *(options.diff_flags + [commit_id])).decoding(None).raw_output()) for commit_id in commit_ids) if options.stat: commit_bytes = git.diffstat(commit_bytes).encode('utf-8') if commit_bytes: pager(commit_bytes)
def func(parser, options, args): """Show the patches modifying a file.""" repository = directory.repository stack = repository.get_stack(options.branch) if not stack.patchorder.applied: raise CmdException('No patches applied') iw = repository.default_iw if not args: files = iw.changed_files(stack.head.data.tree) else: files = iw.ls_files(stack.head.data.tree, args) if not files: raise CmdException('No files specified or no local changes') directory.cd_to_topdir() # Find set of revisions that modify the selected files. revs = set( repository.run( ['git', 'rev-list', '--stdin', stack.base.sha1 + '..' + stack.top.sha1] ) .raw_input('--\n' + '\n'.join(files)) .output_lines() ) diff_lines = [] for pn in stack.patchorder.applied: commit = stack.patches[pn] if commit.sha1 not in revs: continue if options.diff: diff_lines.extend( [ b'-' * 79, pn.encode('utf-8'), b'-' * 79, commit.data.message, b'---', b'', repository.diff_tree( commit.data.parent.data.tree, commit.data.tree, pathlimits=files, diff_opts=options.diff_flags + color_diff_flags(), ), ] ) else: out.stdout(pn) if options.diff: pager(b'\n'.join(diff_lines))
def func(parser, options, args): """Show commit log and diff""" if args and (options.applied or options.unapplied): parser.error('patches may not be given with --applied or --unapplied') elif options.applied and options.unapplied: parser.error('cannot use both --applied and --unapplied') repository = directory.repository stack = repository.get_stack(options.branch) patchorder = stack.patchorder if options.applied: commits = [stack.patches.get(pn).commit for pn in patchorder.applied] elif options.unapplied: commits = [stack.patches.get(pn).commit for pn in patchorder.unapplied] elif not args: commits = [stack.top] elif '..' in ' '.join(args): # patch ranges patch_names = parse_patches( args, patchorder.all, len(patchorder.applied), ) commits = [stack.patches.get(pn).commit for pn in patch_names] else: commits = [] for name in args: if stack.patches.exists(name): commits.append(stack.patches.get(name).commit) else: try: commits.append( repository.rev_parse( name, object_type='commit', discard_stderr=True ) ) except RepositoryException: raise RepositoryException( '%s: Unknown patch or revision name' % name ) cmd = ['git', 'show'] if options.stat: cmd.extend(['--stat', '--summary']) else: cmd.append('--patch') cmd.extend(options.diff_flags) cmd.extend(color_diff_flags()) cmd.extend(commit.sha1 for commit in commits) pager(Run(*cmd).decoding(None).raw_output())
def func(parser, options, args): """Show the tree diff""" repository = directory.repository if options.revs: rev_list = options.revs.split('..') if len(rev_list) not in [1, 2] or not rev_list[0]: parser.error('incorrect parameters to -r') elif len(rev_list) == 1: rev1 = git_commit(rev_list[0], repository) rev2 = None else: rev1 = git_commit(rev_list[0], repository) if rev_list[1]: rev2 = git_commit(rev_list[1], repository) else: rev2 = None else: rev1 = repository.rev_parse('HEAD') rev2 = None iw = repository.default_iw files = iw.ls_files(rev1.data.tree, args) diff_opts = color_diff_flags() diff_opts.extend(options.diff_flags) if rev1 and rev2: diff = repository.diff_tree( rev1.data.tree, rev2.data.tree, diff_opts=diff_opts, pathlimits=files, stat=options.stat, binary=False, ) else: diff = iw.diff( rev1.data.tree, diff_opts=diff_opts, pathlimits=files, stat=options.stat, binary=False, ) pager(diff)
def func(parser, options, args): """Show the files modified by a patch (or the current patch) """ if options.bare and options.stat: raise CmdException('Cannot specify both --bare and --stat') repository = directory.repository if len(args) == 0: stack = repository.current_stack commit = stack.top elif len(args) == 1: branch, name = parse_rev(args[0]) stack = repository.get_stack(branch) if not stack.patches.exists(name): raise CmdException('%s: Unknown patch name' % name) commit = stack.patches.get(name).commit else: parser.error('incorrect number of arguments') if options.stat: cmd = ['git', 'diff-tree', '--stat', '--summary', '--no-commit-id'] cmd.extend(options.diff_flags) cmd.extend(color_diff_flags()) cmd.append(commit.sha1) out.stdout_bytes(repository.run(cmd).decoding(None).raw_output()) else: used = set() for dt in repository.diff_tree_files( commit.data.parent.data.tree, commit.data.tree ): _, _, _, _, status, oldname, newname = dt for filename in [oldname, newname]: if filename in used: continue else: used.add(filename) if options.bare: out.stdout(filename) else: out.stdout('%s %s' % (status, filename))