261 mode) |
261 mode) |
262 |
262 |
263 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always, |
263 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always, |
264 changes=None, text=False): |
264 changes=None, text=False): |
265 if not changes: |
265 if not changes: |
266 (c, a, d, u) = repo.changes(node1, node2, files, match=match) |
266 changes = repo.changes(node1, node2, files, match=match) |
267 else: |
267 modified, added, removed, unknown = changes |
268 (c, a, d, u) = changes |
|
269 if files: |
268 if files: |
270 c, a, d = map(lambda x: filterfiles(files, x), (c, a, d)) |
269 modified, added, removed = map(lambda x: filterfiles(x, files), |
271 |
270 (modified, added, removed)) |
272 if not c and not a and not d: |
271 |
|
272 if not modified and not added and not removed: |
273 return |
273 return |
274 |
274 |
275 if node2: |
275 if node2: |
276 change = repo.changelog.read(node2) |
276 change = repo.changelog.read(node2) |
277 mmap2 = repo.manifest.read(change[0]) |
277 mmap2 = repo.manifest.read(change[0]) |
293 |
293 |
294 change = repo.changelog.read(node1) |
294 change = repo.changelog.read(node1) |
295 mmap = repo.manifest.read(change[0]) |
295 mmap = repo.manifest.read(change[0]) |
296 date1 = util.datestr(change[2]) |
296 date1 = util.datestr(change[2]) |
297 |
297 |
298 for f in c: |
298 for f in modified: |
299 to = None |
299 to = None |
300 if f in mmap: |
300 if f in mmap: |
301 to = repo.file(f).read(mmap[f]) |
301 to = repo.file(f).read(mmap[f]) |
302 tn = read(f) |
302 tn = read(f) |
303 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text)) |
303 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text)) |
304 for f in a: |
304 for f in added: |
305 to = None |
305 to = None |
306 tn = read(f) |
306 tn = read(f) |
307 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text)) |
307 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text)) |
308 for f in d: |
308 for f in removed: |
309 to = repo.file(f).read(mmap[f]) |
309 to = repo.file(f).read(mmap[f]) |
310 tn = None |
310 tn = None |
311 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text)) |
311 fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text)) |
312 |
312 |
313 def trimuser(ui, name, rev, revcache): |
313 def trimuser(ui, name, rev, revcache): |
783 |
783 |
784 if opts['addremove']: |
784 if opts['addremove']: |
785 addremove(ui, repo, *pats, **opts) |
785 addremove(ui, repo, *pats, **opts) |
786 fns, match, anypats, cwd = matchpats(repo, pats, opts) |
786 fns, match, anypats, cwd = matchpats(repo, pats, opts) |
787 if pats: |
787 if pats: |
788 c, a, d, u = repo.changes(files=fns, match=match) |
788 modified, added, removed, unknown = ( |
789 files = c + a + [fn for fn in d if repo.dirstate.state(fn) == 'r'] |
789 repo.changes(files=fns, match=match)) |
|
790 files = (modified + added + |
|
791 [fn for fn in removed if repo.dirstate.state(fn) == 'r']) |
790 else: |
792 else: |
791 files = [] |
793 files = [] |
792 try: |
794 try: |
793 repo.commit(files, message, opts['user'], opts['date'], match) |
795 repo.commit(files, message, opts['user'], opts['date'], match) |
794 except ValueError, inst: |
796 except ValueError, inst: |
1377 if not parents: |
1379 if not parents: |
1378 ui.write(_("unknown\n")) |
1380 ui.write(_("unknown\n")) |
1379 return |
1381 return |
1380 |
1382 |
1381 hexfunc = ui.verbose and hex or short |
1383 hexfunc = ui.verbose and hex or short |
1382 (c, a, d, u) = repo.changes() |
1384 modified, added, removed, unknown = repo.changes() |
1383 output = ["%s%s" % ('+'.join([hexfunc(parent) for parent in parents]), |
1385 output = ["%s%s" % ('+'.join([hexfunc(parent) for parent in parents]), |
1384 (c or a or d) and "+" or "")] |
1386 (modified or added or removed) and "+" or "")] |
1385 |
1387 |
1386 if not ui.quiet: |
1388 if not ui.quiet: |
1387 # multiple tags for a single parent separated by '/' |
1389 # multiple tags for a single parent separated by '/' |
1388 parenttags = ['/'.join(tags) |
1390 parenttags = ['/'.join(tags) |
1389 for tags in map(repo.nodetags, parents) if tags] |
1391 for tags in map(repo.nodetags, parents) if tags] |
1408 safety check, not to import a real mail message. |
1410 safety check, not to import a real mail message. |
1409 """ |
1411 """ |
1410 patches = (patch1,) + patches |
1412 patches = (patch1,) + patches |
1411 |
1413 |
1412 if not opts['force']: |
1414 if not opts['force']: |
1413 (c, a, d, u) = repo.changes() |
1415 modified, added, removed, unknown = repo.changes() |
1414 if c or a or d: |
1416 if modified or added or removed: |
1415 raise util.Abort(_("outstanding uncommitted changes")) |
1417 raise util.Abort(_("outstanding uncommitted changes")) |
1416 |
1418 |
1417 d = opts["base"] |
1419 d = opts["base"] |
1418 strip = opts["strip"] |
1420 strip = opts["strip"] |
1419 |
1421 |
1825 entire project history. If the files still exist in the working |
1827 entire project history. If the files still exist in the working |
1826 directory, they will be deleted from it. |
1828 directory, they will be deleted from it. |
1827 """ |
1829 """ |
1828 names = [] |
1830 names = [] |
1829 def okaytoremove(abs, rel, exact): |
1831 def okaytoremove(abs, rel, exact): |
1830 c, a, d, u = repo.changes(files = [abs]) |
1832 modified, added, removed, unknown = repo.changes(files=[abs]) |
1831 reason = None |
1833 reason = None |
1832 if c: |
1834 if modified: |
1833 reason = _('is modified') |
1835 reason = _('is modified') |
1834 elif a: |
1836 elif added: |
1835 reason = _('has been marked for add') |
1837 reason = _('has been marked for add') |
1836 elif u: |
1838 elif unknown: |
1837 reason = _('is not managed') |
1839 reason = _('is not managed') |
1838 if reason: |
1840 if reason: |
1839 if exact: |
1841 if exact: |
1840 ui.warn(_('not removing %s: file %s\n') % (rel, reason)) |
1842 ui.warn(_('not removing %s: file %s\n') % (rel, reason)) |
1841 else: |
1843 else: |
1889 """ |
1891 """ |
1890 node = opts['rev'] and repo.lookup(opts['rev']) or \ |
1892 node = opts['rev'] and repo.lookup(opts['rev']) or \ |
1891 repo.dirstate.parents()[0] |
1893 repo.dirstate.parents()[0] |
1892 |
1894 |
1893 files, choose, anypats, cwd = matchpats(repo, pats, opts) |
1895 files, choose, anypats, cwd = matchpats(repo, pats, opts) |
1894 (c, a, d, u) = repo.changes(match=choose) |
1896 modified, added, removed, unknown = repo.changes(match=choose) |
1895 repo.forget(a) |
1897 repo.forget(added) |
1896 repo.undelete(d) |
1898 repo.undelete(removed) |
1897 |
1899 |
1898 return repo.update(node, False, True, choose, False) |
1900 return repo.update(node, False, True, choose, False) |
1899 |
1901 |
1900 def root(ui, repo): |
1902 def root(ui, repo): |
1901 """print the root (top) of the current working dir |
1903 """print the root (top) of the current working dir |
2022 R = removed |
2024 R = removed |
2023 ? = not tracked |
2025 ? = not tracked |
2024 """ |
2026 """ |
2025 |
2027 |
2026 files, matchfn, anypats, cwd = matchpats(repo, pats, opts) |
2028 files, matchfn, anypats, cwd = matchpats(repo, pats, opts) |
2027 (c, a, d, u) = [[util.pathto(cwd, x) for x in n] |
2029 modified, added, removed, unknown = [ |
2028 for n in repo.changes(files=files, match=matchfn)] |
2030 [util.pathto(cwd, x) for x in n] |
2029 |
2031 for n in repo.changes(files=files, match=matchfn)] |
2030 changetypes = [(_('modified'), 'M', c), |
2032 |
2031 (_('added'), 'A', a), |
2033 changetypes = [(_('modified'), 'M', modified), |
2032 (_('removed'), 'R', d), |
2034 (_('added'), 'A', added), |
2033 (_('unknown'), '?', u)] |
2035 (_('removed'), 'R', removed), |
|
2036 (_('unknown'), '?', unknown)] |
2034 |
2037 |
2035 end = opts['print0'] and '\0' or '\n' |
2038 end = opts['print0'] and '\0' or '\n' |
2036 |
2039 |
2037 for opt, char, changes in ([ct for ct in changetypes if opts[ct[0]]] |
2040 for opt, char, changes in ([ct for ct in changetypes if opts[ct[0]]] |
2038 or changetypes): |
2041 or changetypes): |
2076 |
2079 |
2077 if opts['local']: |
2080 if opts['local']: |
2078 repo.opener("localtags", "a").write("%s %s\n" % (r, name)) |
2081 repo.opener("localtags", "a").write("%s %s\n" % (r, name)) |
2079 return |
2082 return |
2080 |
2083 |
2081 (c, a, d, u) = repo.changes() |
2084 for x in repo.changes(): |
2082 for x in (c, a, d, u): |
|
2083 if ".hgtags" in x: |
2085 if ".hgtags" in x: |
2084 raise util.Abort(_("working copy of .hgtags is changed " |
2086 raise util.Abort(_("working copy of .hgtags is changed " |
2085 "(please commit .hgtags manually)")) |
2087 "(please commit .hgtags manually)")) |
2086 |
2088 |
2087 repo.wfile(".hgtags", "ab").write("%s %s\n" % (r, name)) |
2089 repo.wfile(".hgtags", "ab").write("%s %s\n" % (r, name)) |