mercurial/commands.py
changeset 396 8f8bb77d560e
parent 395 fbe8834923c5
child 401 af4848f83e68
child 423 25afb21d97ba
equal deleted inserted replaced
395:fbe8834923c5 396:8f8bb77d560e
    30     if os.getcwd() != repo.root:
    30     if os.getcwd() != repo.root:
    31         p = os.getcwd()[len(repo.root) + 1: ]
    31         p = os.getcwd()[len(repo.root) + 1: ]
    32         return [ os.path.normpath(os.path.join(p, x)) for x in args ]
    32         return [ os.path.normpath(os.path.join(p, x)) for x in args ]
    33     return args
    33     return args
    34 
    34 
    35 def dodiff(repo, path, files = None, node1 = None, node2 = None):
    35 def dodiff(ui, repo, path, files = None, node1 = None, node2 = None):
    36     def date(c):
    36     def date(c):
    37         return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
    37         return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
    38 
    38 
    39     if node2:
    39     if node2:
    40         change = repo.changelog.read(node2)
    40         change = repo.changelog.read(node2)
    47         (c, a, d, u) = repo.diffdir(path, node1)
    47         (c, a, d, u) = repo.diffdir(path, node1)
    48         if not node1:
    48         if not node1:
    49             node1 = repo.dirstate.parents()[0]
    49             node1 = repo.dirstate.parents()[0]
    50         def read(f): return file(os.path.join(repo.root, f)).read()
    50         def read(f): return file(os.path.join(repo.root, f)).read()
    51 
    51 
       
    52     if ui.quiet:
       
    53         r = None
       
    54     else:
       
    55         hexfunc = ui.verbose and hg.hex or hg.short
       
    56         r = [hexfunc(node) for node in [node1, node2] if node]
       
    57 
    52     change = repo.changelog.read(node1)
    58     change = repo.changelog.read(node1)
    53     mmap = repo.manifest.read(change[0])
    59     mmap = repo.manifest.read(change[0])
    54     date1 = date(change)
    60     date1 = date(change)
    55 
    61 
    56     if files:
    62     if files:
    59     for f in c:
    65     for f in c:
    60         to = None
    66         to = None
    61         if f in mmap:
    67         if f in mmap:
    62             to = repo.file(f).read(mmap[f])
    68             to = repo.file(f).read(mmap[f])
    63         tn = read(f)
    69         tn = read(f)
    64         sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
    70         sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f, r))
    65     for f in a:
    71     for f in a:
    66         to = None
    72         to = None
    67         tn = read(f)
    73         tn = read(f)
    68         sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
    74         sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f, r))
    69     for f in d:
    75     for f in d:
    70         to = repo.file(f).read(mmap[f])
    76         to = repo.file(f).read(mmap[f])
    71         tn = None
    77         tn = None
    72         sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
    78         sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f, r))
    73 
    79 
    74 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None):
    80 def show_changeset(ui, repo, rev=0, changenode=None, filelog=None):
    75     """show a single changeset or file revision"""
    81     """show a single changeset or file revision"""
    76     changelog = repo.changelog
    82     changelog = repo.changelog
    77     if filelog:
    83     if filelog:
   288 def diff(ui, repo, *files, **opts):
   294 def diff(ui, repo, *files, **opts):
   289     """diff working directory (or selected files)"""
   295     """diff working directory (or selected files)"""
   290     revs = []
   296     revs = []
   291     if opts['rev']:
   297     if opts['rev']:
   292         revs = map(lambda x: repo.lookup(x), opts['rev'])
   298         revs = map(lambda x: repo.lookup(x), opts['rev'])
   293     
   299 
   294     if len(revs) > 2:
   300     if len(revs) > 2:
   295         self.ui.warn("too many revisions to diff\n")
   301         self.ui.warn("too many revisions to diff\n")
   296         sys.exit(1)
   302         sys.exit(1)
   297 
   303 
   298     if files:
   304     if files:
   299         files = relpath(repo, files)
   305         files = relpath(repo, files)
   300     else:
   306     else:
   301         files = relpath(repo, [""])
   307         files = relpath(repo, [""])
   302 
   308 
   303     dodiff(repo, os.getcwd(), files, *revs)
   309     dodiff(ui, repo, os.getcwd(), files, *revs)
   304 
   310 
   305 def export(ui, repo, changeset):
   311 def export(ui, repo, changeset):
   306     """dump the changeset header and diffs for a revision"""
   312     """dump the changeset header and diffs for a revision"""
   307     node = repo.lookup(changeset)
   313     node = repo.lookup(changeset)
   308     prev, other = repo.changelog.parents(node)
   314     prev, other = repo.changelog.parents(node)
   314     print
   320     print
   315     if other != hg.nullid:
   321     if other != hg.nullid:
   316         print "# Parent  %s" % hg.hex(other)
   322         print "# Parent  %s" % hg.hex(other)
   317     print change[4].rstrip()
   323     print change[4].rstrip()
   318     print
   324     print
   319     
   325 
   320     dodiff(repo, "", None, prev, node)
   326     dodiff(ui, repo, "", None, prev, node)
   321 
   327 
   322 def forget(ui, repo, file, *files):
   328 def forget(ui, repo, file, *files):
   323     """don't add the specified files on the next commit"""
   329     """don't add the specified files on the next commit"""
   324     repo.forget(relpath(repo, (file,) + files))
   330     repo.forget(relpath(repo, (file,) + files))
   325 
   331