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']) |