hgext/hgk.py
changeset 3060 aa1cee5b8afb
parent 3056 3dab573a4330
child 3061 fe5c92529d1c
equal deleted inserted replaced
3059:5e39ad2c8b52 3060:aa1cee5b8afb
    59         to = repo.file(f).read(mmap[f])
    59         to = repo.file(f).read(mmap[f])
    60         tn = None
    60         tn = None
    61         fp.write("diff --git a/%s /dev/null\n" % (f))
    61         fp.write("diff --git a/%s /dev/null\n" % (f))
    62         fp.write(mdiff.unidiff(to, date1, tn, date2, f, None, opts=opts))
    62         fp.write(mdiff.unidiff(to, date1, tn, date2, f, None, opts=opts))
    63 
    63 
    64 def difftree(ui, repo, node1=None, node2=None, **opts):
    64 def difftree(ui, repo, node1=None, node2=None, *files, **opts):
    65     """diff trees from two commits"""
    65     """diff trees from two commits"""
    66     def __difftree(repo, node1, node2):
    66     def __difftree(repo, node1, node2, files=[]):
    67         def date(c):
    67         def date(c):
    68             return time.asctime(time.gmtime(c[2][0]))
    68             return time.asctime(time.gmtime(c[2][0]))
    69 
    69 
    70         if node2:
    70         if node2:
    71             change = repo.changelog.read(node2)
    71             change = repo.changelog.read(node2)
    72             mmap2 = repo.manifest.read(change[0])
    72             mmap2 = repo.manifest.read(change[0])
    73             modified, added, removed, deleted, unknown = repo.status(node1, node2)[:5]
    73             status = repo.status(node1, node2, files=files)[:5]
       
    74             modified, added, removed, deleted, unknown = status
    74             def read(f): return repo.file(f).read(mmap2[f])
    75             def read(f): return repo.file(f).read(mmap2[f])
    75             date2 = date(change)
    76             date2 = date(change)
    76         else:
    77         else:
    77             date2 = time.asctime()
    78             date2 = time.asctime()
    78             modified, added, removed, deleted, unknown = repo.status(node1)[:5]
    79             status = repo.status(node1, files=files)[:5]
       
    80             modified, added, removed, deleted, unknown = status
    79             if not node1:
    81             if not node1:
    80                 node1 = repo.dirstate.parents()[0]
    82                 node1 = repo.dirstate.parents()[0]
    81             def read(f): return file(os.path.join(repo.root, f)).read()
    83             def read(f): return file(os.path.join(repo.root, f)).read()
    82 
    84 
    83         change = repo.changelog.read(node1)
    85         change = repo.changelog.read(node1)
   118             node2 = node1
   120             node2 = node1
   119             node1 = repo.changelog.parents(node1)[0]
   121             node1 = repo.changelog.parents(node1)[0]
   120         if opts['patch']:
   122         if opts['patch']:
   121             if opts['pretty']:
   123             if opts['pretty']:
   122                 catcommit(repo, node2, "")
   124                 catcommit(repo, node2, "")
   123             dodiff(sys.stdout, ui, repo, node1, node2)
   125             dodiff(sys.stdout, ui, repo, node1, node2, files=files)
   124         else:
   126         else:
   125             __difftree(repo, node1, node2)
   127             __difftree(repo, node1, node2, files=files)
   126         if not opts['stdin']:
   128         if not opts['stdin']:
   127             break
   129             break
   128 
   130 
   129 def catcommit(repo, n, prefix, changes=None):
   131 def catcommit(repo, n, prefix, changes=None):
   130     nlprefix = '\n' + prefix;
   132     nlprefix = '\n' + prefix;
   330                             ('r', 'recursive', None, 'recursive'),
   332                             ('r', 'recursive', None, 'recursive'),
   331                             ('P', 'pretty', None, 'pretty'),
   333                             ('P', 'pretty', None, 'pretty'),
   332                             ('s', 'stdin', None, 'stdin'),
   334                             ('s', 'stdin', None, 'stdin'),
   333                             ('C', 'copy', None, 'detect copies'),
   335                             ('C', 'copy', None, 'detect copies'),
   334                             ('S', 'search', "", 'search')],
   336                             ('S', 'search', "", 'search')],
   335                             "hg git-diff-tree [options] node1 node2"),
   337                             "hg git-diff-tree [options] node1 node2 [files...]"),
   336     "debug-cat-file": (catfile, [('s', 'stdin', None, 'stdin')],
   338     "debug-cat-file": (catfile, [('s', 'stdin', None, 'stdin')],
   337                  "hg debug-cat-file [options] type file"),
   339                  "hg debug-cat-file [options] type file"),
   338     "debug-merge-base": (base, [], "hg debug-merge-base node node"),
   340     "debug-merge-base": (base, [], "hg debug-merge-base node node"),
   339     "debug-rev-list": (revlist, [('H', 'header', None, 'header'),
   341     "debug-rev-list": (revlist, [('H', 'header', None, 'header'),
   340                            ('t', 'topo-order', None, 'topo-order'),
   342                            ('t', 'topo-order', None, 'topo-order'),