hgext/extdiff.py
changeset 4096 49237d6ae97d
parent 4005 656e06eebda7
parent 4089 0ff50cc7acb4
child 4730 eadfaa9ec487
equal deleted inserted replaced
4085:719488a98ebe 4096:49237d6ae97d
    55 
    55 
    56 def dodiff(ui, repo, diffcmd, diffopts, pats, opts):
    56 def dodiff(ui, repo, diffcmd, diffopts, pats, opts):
    57     def snapshot_node(files, node):
    57     def snapshot_node(files, node):
    58         '''snapshot files as of some revision'''
    58         '''snapshot files as of some revision'''
    59         mf = repo.changectx(node).manifest()
    59         mf = repo.changectx(node).manifest()
    60         dirname = '%s.%s' % (os.path.basename(repo.root), short(node))
    60         dirname = os.path.basename(repo.root)
       
    61         if dirname == "":
       
    62             dirname = "root"
       
    63         dirname = '%s.%s' % (dirname, short(node))
    61         base = os.path.join(tmproot, dirname)
    64         base = os.path.join(tmproot, dirname)
    62         os.mkdir(base)
    65         os.mkdir(base)
    63         if not ui.quiet:
    66         if not ui.quiet:
    64             ui.write_err(_('making snapshot of %d files from rev %s\n') %
    67             ui.write_err(_('making snapshot of %d files from rev %s\n') %
    65                          (len(files), short(node)))
    68                          (len(files), short(node)))
    72             dest = os.path.join(base, wfn)
    75             dest = os.path.join(base, wfn)
    73             destdir = os.path.dirname(dest)
    76             destdir = os.path.dirname(dest)
    74             if not os.path.isdir(destdir):
    77             if not os.path.isdir(destdir):
    75                 os.makedirs(destdir)
    78                 os.makedirs(destdir)
    76             data = repo.wwritedata(wfn, repo.file(wfn).read(mf[wfn]))
    79             data = repo.wwritedata(wfn, repo.file(wfn).read(mf[wfn]))
    77             open(dest, 'w').write(data)
    80             open(dest, 'wb').write(data)
    78         return dirname
    81         return dirname
    79 
    82 
    80     def snapshot_wdir(files):
    83     def snapshot_wdir(files):
    81         '''snapshot files from working directory.
    84         '''snapshot files from working directory.
    82         if not using snapshot, -I/-X does not work and recursive diff
    85         if not using snapshot, -I/-X does not work and recursive diff
    83         in tools like kdiff3 and meld displays too many files.'''
    86         in tools like kdiff3 and meld displays too many files.'''
    84         dirname = os.path.basename(repo.root)
    87         dirname = os.path.basename(repo.root)
       
    88         if dirname == "":
       
    89             dirname = "root"
    85         base = os.path.join(tmproot, dirname)
    90         base = os.path.join(tmproot, dirname)
    86         os.mkdir(base)
    91         os.mkdir(base)
    87         if not ui.quiet:
    92         if not ui.quiet:
    88             ui.write_err(_('making snapshot of %d files from working dir\n') %
    93             ui.write_err(_('making snapshot of %d files from working dir\n') %
    89                          (len(files)))
    94                          (len(files)))
    92             ui.note('  %s\n' % wfn)
    97             ui.note('  %s\n' % wfn)
    93             dest = os.path.join(base, wfn)
    98             dest = os.path.join(base, wfn)
    94             destdir = os.path.dirname(dest)
    99             destdir = os.path.dirname(dest)
    95             if not os.path.isdir(destdir):
   100             if not os.path.isdir(destdir):
    96                 os.makedirs(destdir)
   101                 os.makedirs(destdir)
    97             fp = open(dest, 'w')
   102             fp = open(dest, 'wb')
    98             for chunk in util.filechunkiter(repo.wopener(wfn)):
   103             for chunk in util.filechunkiter(repo.wopener(wfn)):
    99                 fp.write(chunk)
   104                 fp.write(chunk)
   100         return dirname
   105         return dirname
   101 
   106 
   102     node1, node2 = cmdutil.revpair(repo, opts['rev'])
   107     node1, node2 = cmdutil.revpair(repo, opts['rev'])