示例#1
0
def grep(repo,
         pattern,
         files,
         revisions=None,
         ignore_case=False,
         wdfiles=True):
    ui = CaptureUI()
    args = [ui, repo, pattern]
    args.extend(files)
    revisions = [
        ":".join(rev) if type(rev) is list else rev for rev in revisions
    ]
    if not revisions:
        revisions = None
    kwargs = {
        'rev': revisions,
        'ignore_case': bool(ignore_case),
        'line_number': True,
        'print0': True
    }
    cs = g_cs(repo, '.')
    kwargs['follow'] = not [f for f in files if f not in cs]
    run_in_dir(repo.root, commands.grep, *args, **kwargs)
    items = (ui._getCaptured(verbatim=True)).split("\0")
    # XXX grep uses "\0" as a terminator, thus last line ends with "\0"
    items.pop()
    r_vim = []
    status_cache = {}

    def check_not_modified_since(rev, file):
        key = rev + ':' + file
        if key in status_cache:
            return status_cache[key]
        r = file in repo.status(node1=rev,
                                clean=True,
                                match=match.match(None,
                                                  None, [file],
                                                  exact=True))[6]
        status_cache[key] = r
        return r

    while items:
        file = items.pop(0)
        rev = items.pop(0)
        lnum = int(items.pop(0))
        text = items.pop(0)
        if wdfiles and check_not_modified_since(rev, file):
            file = os.path.join(repo.root, file)
        else:
            file = (rev, file)
        r_vim.append({'filename': file, 'lnum': int(lnum), 'text': text})
    return r_vim
示例#2
0
def grep(repo, pattern, files, revisions=None, ignore_case=False, wdfiles=True):
    ui=CaptureUI()
    args=[ui, repo, pattern]
    args.extend(files)
    revisions=[":".join(rev) if type(rev) is list else rev
                             for rev in revisions]
    if not revisions:
        revisions=None
    kwargs={'rev': revisions, 'ignore_case': bool(ignore_case),
            'line_number': True, 'print0': True}
    cs=g_cs(repo, '.')
    kwargs['follow']=not [f for f in files if f not in cs]
    run_in_dir(repo.root, commands.grep, *args, **kwargs)
    items=(ui._getCaptured(verbatim=True)).split("\0")
    # XXX grep uses "\0" as a terminator, thus last line ends with "\0"
    items.pop()
    r_vim=[]
    status_cache={}
    def check_not_modified_since(rev, file):
        key=rev+':'+file
        if key in status_cache:
            return status_cache[key]
        r=file in repo.status(node1=rev, clean=True,
                              match=match.match(None, None, [file],
                                                exact=True))[6]
        status_cache[key]=r
        return r
    while items:
        file=items.pop(0)
        rev=items.pop(0)
        lnum=int(items.pop(0))
        text=items.pop(0)
        if wdfiles and check_not_modified_since(rev, file):
            file=os.path.join(repo.root, file)
        else:
            file=(rev, file)
        r_vim.append({'filename': file, 'lnum': int(lnum), 'text': text})
    return r_vim
示例#3
0
def diff(*args, **kwargs):
    ui=CaptureUI()
    dodiff(ui, *args, **kwargs)
    return ui._getCaptured()
示例#4
0
def diff(*args, **kwargs):
    ui = CaptureUI()
    dodiff(ui, *args, **kwargs)
    return ui._getCaptured()