Esempio n. 1
0
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)
Esempio n. 2
0
File: show.py Progetto: snits/stgit
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)
Esempio n. 3
0
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)
Esempio n. 4
0
File: diff.py Progetto: snits/stgit
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)
Esempio n. 5
0
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)
Esempio n. 6
0
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))
Esempio n. 7
0
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())
Esempio n. 8
0
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)
Esempio n. 9
0
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))