##// END OF EJS Templates
fix bad assumption about uniqueness of file versions...
fix bad assumption about uniqueness of file versions -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 fix bad assumption about uniqueness of file versions Mercurial had assumed that a given file hash could show up in only one changeset, and thus that the mapping from file revision to changeset was 1-to-1. But if two people perform the same edit with the same parents, we can get an identical hash in different changesets. So we've got to loosen up our uniqueness checks in addgroup and in verify. manifest hash: 5462003241e7d071ffa1741b87a59f646c9988ed -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCoMDkywK+sNU5EO8RAg9PAJ9YWSknfFBoeYve/+Z5DDGGvytDkwCgoMwj kT01PcjNzGPr1/Oe5WRvulE= =HC4t -----END PGP SIGNATURE-----

File last commit:

r224:ccbcc4d7 default
r224:ccbcc4d7 default
Show More
hg
538 lines | 16.4 KiB | text/plain | TextLexer
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 #!/usr/bin/env python
#
# mercurial - a minimal scalable distributed SCM
mpm@selenic.com
Bump the version number to 0.5b for the protocol change...
r193 # v0.5b "katje"
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 #
# Copyright 2005 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
mpm@selenic.com
Add changegroup support
r46 # the psyco compiler makes commits a bit faster
# and makes changegroup merge about 20 times slower!
# try:
# import psyco
# psyco.full()
# except:
# pass
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
mpm@selenic.com
Import time for hg history command
r23 import sys, os, time
mpm@selenic.com
Beginning of new command parsing interface...
r209 from mercurial import hg, mdiff, fancyopts, ui, commands
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
mpm@selenic.com
Give a friendlier message when repo isn't found
r18 def help():
mpm@selenic.com
hg: remove some debug commands, improve help messages, add .hgpaths file...
r175 ui.status("""\
mpm@selenic.com
Give a friendlier message when repo isn't found
r18 commands:
mpm@selenic.com
Add options to annotate for user/rev/changeset...
r150 add [files...] add the given files in the next commit
addremove add all new files, delete all missing files
annotate [files...] show changeset number per file line
mpm@selenic.com
Give a friendlier message when repo isn't found
r18 branch <path> create a branch of <path> in this directory
checkout [changeset] checkout the latest or given changeset
commit commit all changes to the repository
mpm@selenic.com
Add options to annotate for user/rev/changeset...
r150 diff [files...] diff working directory (or selected files)
mpm@selenic.com
Give a friendlier message when repo isn't found
r18 dump <file> [rev] dump the latest or given revision of a file
dumpmanifest [rev] dump the latest or given revision of the manifest
jake@edge2.net
add export, recover, and undo to the man page...
r196 export <rev> dump the changeset header and diffs for a revision
mpm@selenic.com
Add options to annotate for user/rev/changeset...
r150 history show changeset history
init create a new repository in this directory
log <file> show revision history of a single file
merge <path> merge changes from <path> into local repository
mpm@selenic.com
Make undo and recover friendlier...
r163 recover rollback an interrupted transaction
mpm@selenic.com
Add options to annotate for user/rev/changeset...
r150 remove [files...] remove the given files in the next commit
mpm@selenic.com
Add 'hg serve' command for stand-alone server...
r158 serve export the repository via HTTP
mpm@selenic.com
Add options to annotate for user/rev/changeset...
r150 status show new, missing, and changed files in working dir
mpm@selenic.com
Add tag support
r67 tags show current changeset tags
mpm@selenic.com
Make undo and recover friendlier...
r163 undo undo the last transaction
mpm@selenic.com
hg: remove some debug commands, improve help messages, add .hgpaths file...
r175 """)
mpm@selenic.com
Give a friendlier message when repo isn't found
r18
mpm@selenic.com
Support for 0, 1, or 2 diff revs
r33 def filterfiles(list, files):
l = [ x for x in list if x in files ]
mpm@selenic.com
diffdir tidy in preparation for arg handling
r31
mpm@selenic.com
Support for 0, 1, or 2 diff revs
r33 for f in files:
if f[-1] != os.sep: f += os.sep
l += [ x for x in list if x.startswith(f) ]
return l
mpm@selenic.com
diffdir tidy in preparation for arg handling
r31
mpm@selenic.com
Add export command
r34 def diff(files = None, node1 = None, node2 = None):
mpm@selenic.com
Diff in subdirectories from Jake Edge...
r64 def date(c):
return time.asctime(time.gmtime(float(c[2].split(' ')[0])))
mpm@selenic.com
Add export command
r34
if node2:
change = repo.changelog.read(node2)
mmap2 = repo.manifest.read(change[0])
(c, a, d) = repo.diffrevs(node1, node2)
def read(f): return repo.file(f).read(mmap2[f])
mpm@selenic.com
Diff in subdirectories from Jake Edge...
r64 date2 = date(change)
mpm@selenic.com
Add export command
r34 else:
mpm@selenic.com
Diff in subdirectories from Jake Edge...
r64 date2 = time.asctime()
mpm@selenic.com
Add export command
r34 if not node1:
node1 = repo.current
mpm@selenic.com
change dircache into dirstate...
r220 (c, a, d, u) = repo.diffdir(repo.root, node1)
mpm@selenic.com
Fix diff and export not showing added files
r129 a = [] # ignore unknown files in repo, by popular request
mpm@selenic.com
Diff in subdirectories from Jake Edge...
r64 def read(f): return file(os.path.join(repo.root, f)).read()
mpm@selenic.com
Add export command
r34
change = repo.changelog.read(node1)
mmap = repo.manifest.read(change[0])
mpm@selenic.com
Diff in subdirectories from Jake Edge...
r64 date1 = date(change)
mpm@selenic.com
Add export command
r34
if files:
mpm@selenic.com
Fix diff and export not showing added files
r129 c, a, d = map(lambda x: filterfiles(x, files), (c, a, d))
mpm@selenic.com
Add export command
r34
for f in c:
mpm@selenic.com
change dircache into dirstate...
r220 to = repo.file(f).read(mmap[f])
mpm@selenic.com
Add export command
r34 tn = read(f)
mpm@selenic.com
Diff in subdirectories from Jake Edge...
r64 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
mpm@selenic.com
Fix diff and export not showing added files
r129 for f in a:
to = ""
tn = read(f)
sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
mpm@selenic.com
Add export command
r34 for f in d:
to = repo.file(f).read(mmap[f])
tn = ""
mpm@selenic.com
Diff in subdirectories from Jake Edge...
r64 sys.stdout.write(mdiff.unidiff(to, date1, tn, date2, f))
mpm@selenic.com
Add export command
r34
mpm@selenic.com
Beginning of new command parsing interface...
r209
try:
sys.exit(commands.dispatch(sys.argv[1:]))
except commands.UnknownCommand:
# fall through
pass
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 options = {}
opts = [('v', 'verbose', None, 'verbose'),
mpm@selenic.com
Add -q quiet option...
r83 ('d', 'debug', None, 'debug'),
mpm@selenic.com
Make prompting go...
r107 ('q', 'quiet', None, 'quiet'),
('y', 'noninteractive', None, 'run non-interactively'),
]
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
args = fancyopts.fancyopts(sys.argv[1:], opts, options,
'hg [options] <command> [command options] [files]')
try:
cmd = args[0]
args = args[1:]
except:
mpm@selenic.com
hg: don't complain about missing repo with no args...
r206 cmd = "help"
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
mpm@selenic.com
Move ui class to its own module...
r207 ui = ui.ui(options["verbose"], options["debug"], options["quiet"],
mpm@selenic.com
Make prompting go...
r107 not options["noninteractive"])
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
mpm@selenic.com
commands: migrate status and branch...
r213 try:
repo = hg.repository(ui=ui)
except IOError:
ui.warn("Unable to open repository\n")
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 sys.exit(0)
jake@edge2.net
adding subdir support for log and status commands
r103 relpath = None
if os.getcwd() != repo.root:
relpath = os.getcwd()[len(repo.root) + 1: ]
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 elif cmd == "add":
repo.add(args)
mpm@selenic.com
change dircache into dirstate...
r220 elif cmd == "forget":
repo.forget(args)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 elif cmd == "remove" or cmd == "rm" or cmd == "del" or cmd == "delete":
repo.remove(args)
elif cmd == "commit" or cmd == "checkin" or cmd == "ci":
if 1:
if len(args) > 0:
mpm@selenic.com
diffdir tidy in preparation for arg handling
r31 repo.commit(repo.current, args)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 else:
mpm@selenic.com
diffdir tidy in preparation for arg handling
r31 repo.commit(repo.current)
mpm@selenic.com
hg rawcommit command...
r203 elif cmd == "rawcommit":
"raw commit interface"
rc = {}
opts = [('p', 'parent', [], 'parent'),
('d', 'date', "", 'data'),
('u', 'user', "", 'user'),
('F', 'files', "", 'file list'),
('t', 'text', "", 'commit text'),
('l', 'logfile', "", 'commit text file')
]
args = fancyopts.fancyopts(args, opts, rc,
"hg rawcommit [options] files")
text = rc['text']
if not text and rc['logfile']:
try: text = open(rc['logfile']).read()
except IOError: pass
if not text and not rc['logfile']:
print "missing commit text"
sys.exit(0)
if rc['files']:
files = open(rc['files']).read().splitlines()
else:
files = args
repo.rawcommit(files, text, rc['user'], rc['date'], *rc['parent'])
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 elif cmd == "import" or cmd == "patch":
mpm@selenic.com
Minor changes to import so that we can successfully import Ingo's...
r69 try:
import psyco
psyco.full()
except:
pass
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 ioptions = {}
opts = [('p', 'strip', 1, 'path strip'),
mpm@selenic.com
Add -q option to import...
r50 ('b', 'base', "", 'base path'),
('q', 'quiet', "", 'silence diff')
]
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
args = fancyopts.fancyopts(args, opts, ioptions,
'hg import [options] <patch names>')
d = ioptions["base"]
strip = ioptions["strip"]
mpm@selenic.com
Add -q option to import...
r50 quiet = ioptions["quiet"] and "> /dev/null" or ""
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
for patch in args:
ui.status("applying %s\n" % patch)
mpm@selenic.com
Import comments from patches
r49 pf = os.path.join(d, patch)
mpm@selenic.com
Fix tabs...
r62 text = ""
for l in file(pf):
mpm@selenic.com
Minor changes to import so that we can successfully import Ingo's...
r69 if l[:4] == "--- ": break
mpm@selenic.com
Fix tabs...
r62 text += l
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 f = os.popen("lsdiff --strip %d %s" % (strip, pf))
mpm@selenic.com
Fix lsdiff filtering
r54 files = filter(None, map(lambda x: x.rstrip(), f.read().splitlines()))
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 f.close()
mpm@selenic.com
Minor changes to import so that we can successfully import Ingo's...
r69
if files:
if os.system("patch -p%d < %s %s" % (strip, pf, quiet)):
raise "patch failed!"
mpm@selenic.com
Import comments from patches
r49 repo.commit(repo.current, files, text)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
elif cmd == "diff":
mpm@selenic.com
Add export command
r34 revs = []
mpm@selenic.com
diffdir tidy in preparation for arg handling
r31
mpm@selenic.com
Support for 0, 1, or 2 diff revs
r33 if args:
mpm@selenic.com
Add improved rev lookup to diff and export
r38 doptions = {}
mpm@selenic.com
Support for 0, 1, or 2 diff revs
r33 opts = [('r', 'revision', [], 'revision')]
args = fancyopts.fancyopts(args, opts, doptions,
'hg diff [options] [files]')
mpm@selenic.com
Add tag support
r67 revs = map(lambda x: repo.lookup(x), doptions['revision'])
mpm@selenic.com
Support for 0, 1, or 2 diff revs
r33
if len(revs) > 2:
mpm@selenic.com
Add -q quiet option...
r83 self.ui.warn("too many revisions to diff\n")
mpm@selenic.com
Support for 0, 1, or 2 diff revs
r33 sys.exit(1)
mpm@selenic.com
Diff in subdirectories from Jake Edge...
r64
jake@edge2.net
adding subdir support for log and status commands
r103 if relpath:
mpm@selenic.com
Diff in subdirectories from Jake Edge...
r64 if not args: args = [ relpath ]
else: args = [ os.path.join(relpath, x) for x in args ]
diff(args, *revs)
mpm@selenic.com
Support for 0, 1, or 2 diff revs
r33
mpm@selenic.com
Add export command
r34 elif cmd == "export":
mpm@selenic.com
Add tag support
r67 node = repo.lookup(args[0])
mpm@selenic.com
Print changeset metadata for export
r68 prev, other = repo.changelog.parents(node)
change = repo.changelog.read(node)
print "# HG changeset patch"
print "# User %s" % change[1]
print "# Node ID %s" % hg.hex(node)
print "# Parent %s" % hg.hex(prev)
print
if other != hg.nullid:
print "# Parent %s" % hg.hex(other)
print change[4]
mpm@selenic.com
Add export command
r34 diff(None, prev, node)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
mpm@selenic.com
Add changegroup support
r46 elif cmd == "debugchangegroup":
mpm@selenic.com
Add tag support
r67 newer = repo.newer(map(repo.lookup, args))
mpm@selenic.com
Fix tabs...
r62 for chunk in repo.changegroup(newer):
sys.stdout.write(chunk)
mpm@selenic.com
Add changegroup support
r46
elif cmd == "debugaddchangegroup":
data = sys.stdin.read()
repo.addchangegroup(data)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 elif cmd == "addremove":
mpm@selenic.com
change dircache into dirstate...
r220 (c, a, d, u) = repo.diffdir(repo.root, repo.current)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 repo.add(a)
repo.remove(d)
elif cmd == "history":
for i in range(repo.changelog.count()):
n = repo.changelog.node(i)
changes = repo.changelog.read(n)
(p1, p2) = repo.changelog.parents(n)
(h, h1, h2) = map(hg.hex, (n, p1, p2))
(i1, i2) = map(repo.changelog.rev, (p1, p2))
print "rev: %4d:%s" % (i, h)
print "parents: %4d:%s" % (i1, h1)
if i2: print " %4d:%s" % (i2, h2)
print "manifest: %4d:%s" % (repo.manifest.rev(changes[0]),
hg.hex(changes[0]))
print "user:", changes[1]
mpm@selenic.com
Show date in history
r21 print "date:", time.asctime(
time.localtime(float(changes[2].split(' ')[0])))
mpm@selenic.com
hg history: don't print file list without -v switch
r123 if ui.verbose: print "files:", " ".join(changes[3])
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 print "description:"
print changes[4]
mpm@selenic.com
Add tip command
r89 elif cmd == "tip":
n = repo.changelog.tip()
t = repo.changelog.rev(n)
ui.status("%d:%s\n" % (t, hg.hex(n)))
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 elif cmd == "log":
jake@edge2.net
adding subdir support for log and status commands
r103
if len(args) == 1:
if relpath:
args[0] = os.path.join(relpath, args[0])
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 r = repo.file(args[0])
for i in range(r.count()):
n = r.node(i)
(p1, p2) = r.parents(n)
(h, h1, h2) = map(hg.hex, (n, p1, p2))
(i1, i2) = map(r.rev, (p1, p2))
cr = r.linkrev(n)
cn = hg.hex(repo.changelog.node(cr))
print "rev: %4d:%s" % (i, h)
print "changeset: %4d:%s" % (cr, cn)
print "parents: %4d:%s" % (i1, h1)
if i2: print " %4d:%s" % (i2, h2)
jake@edge2.net
adding subdir support for log and status commands
r103 changes = repo.changelog.read(repo.changelog.node(cr))
mpm@selenic.com
Date on its own line in file log
r105 print "user: %s" % changes[1]
print "date: %s" % time.asctime(
mpm@selenic.com
Don't diff unknown files...
r106 time.localtime(float(changes[2].split(' ')[0])))
jake@edge2.net
adding subdir support for log and status commands
r103 print "description:"
print changes[4]
print
elif len(args) > 1:
print "too many args"
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 else:
print "missing filename"
elif cmd == "dump":
if args:
r = repo.file(args[0])
n = r.tip()
mpm@selenic.com
Add lookup smarts everywhere...
r39 if len(args) > 1: n = r.lookup(args[1])
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 sys.stdout.write(r.read(n))
else:
print "missing filename"
elif cmd == "dumpmanifest":
n = repo.manifest.tip()
if len(args) > 0:
mpm@selenic.com
Add lookup smarts everywhere...
r39 n = repo.manifest.lookup(args[0])
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 m = repo.manifest.read(n)
files = m.keys()
files.sort()
for f in files:
print hg.hex(m[f]), f
mpm@selenic.com
Add debughash and debugindex commands
r24 elif cmd == "debugindex":
mpm@selenic.com
hack so that debugindex takes filenames
r91 if ".hg" not in args[0]:
args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i"
mpm@selenic.com
Add debughash and debugindex commands
r24 r = hg.revlog(open, args[0], "")
mpm@selenic.com
Fix debugindex formatting for large repos
r70 print " rev offset length base linkrev"+\
mpm@selenic.com
Add debughash and debugindex commands
r24 " p1 p2 nodeid"
for i in range(r.count()):
e = r.index[i]
mpm@selenic.com
Fix debugindex formatting for large repos
r70 print "% 6d % 9d % 7d % 6d % 7d %s.. %s.. %s.." % (
mpm@selenic.com
Add debughash and debugindex commands
r24 i, e[0], e[1], e[2], e[3],
hg.hex(e[4][:5]), hg.hex(e[5][:5]), hg.hex(e[6][:5]))
mpm@selenic.com
Add debugindexdot to generate graphviz dot files from indexes
r92 elif cmd == "debugindexdot":
if ".hg" not in args[0]:
args[0] = ".hg/data/" + repo.file(args[0]).encodepath(args[0]) + "i"
r = hg.revlog(open, args[0], "")
print "digraph G {"
for i in range(r.count()):
e = r.index[i]
print "\t%d -> %d" % (r.rev(e[4]), i)
if e[5] != hg.nullid:
print "\t%d -> %d" % (r.rev(e[5]), i)
print "}"
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 elif cmd == "merge":
mpm@selenic.com
change dircache into dirstate...
r220 (c, a, d, u) = repo.diffdir(repo.root, repo.current)
if c or a or d:
mpm@selenic.com
hg merge: abort if there are outstanding changes in the working directory...
r174 ui.warn("aborting (outstanding changes in working directory)\n")
sys.exit(1)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 if args:
mpm@selenic.com
hg: remove some debug commands, improve help messages, add .hgpaths file...
r175 paths = {}
try:
pf = os.path.join(os.environ["HOME"], ".hgpaths")
for l in file(pf):
name, path = l.split()
paths[name] = path
except:
pass
if args[0] in paths: args[0] = paths[args[0]]
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 other = hg.repository(ui, args[0])
mpm@selenic.com
Fix tabs...
r62 cg = repo.getchangegroup(other)
repo.addchangegroup(cg)
else:
print "missing source repository"
mpm@selenic.com
Add tag support
r67 elif cmd == "tags":
repo.lookup(0) # prime the cache
i = repo.tags.items()
i.sort()
for k, n in i:
try:
r = repo.changelog.rev(n)
except KeyError:
r = "?"
print "%-30s %5d:%s" % (k, repo.changelog.rev(n), hg.hex(n))
mpm@selenic.com
Implement recover and undo commands...
r162 elif cmd == "recover":
repo.recover()
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 elif cmd == "verify":
filelinkrevs = {}
filenodes = {}
manifestchangeset = {}
changesets = revisions = files = 0
mpm@selenic.com
Verify improvements:...
r87 errors = 0
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
mpm@selenic.com
Verify improvements:...
r87 ui.status("checking changesets\n")
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 for i in range(repo.changelog.count()):
changesets += 1
n = repo.changelog.node(i)
mpm@selenic.com
Verify improvements:...
r87 for p in repo.changelog.parents(n):
if p not in repo.changelog.nodemap:
ui.warn("changeset %s has unknown parent %s\n" %
(hg.short(n), hg.short(p)))
errors += 1
try:
changes = repo.changelog.read(n)
mpm@selenic.com
Minor fixes to verify
r145 except Exception, inst:
mpm@selenic.com
Verify improvements:...
r87 ui.warn("unpacking changeset %s: %s\n" % (short(n), inst))
errors += 1
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 manifestchangeset[changes[0]] = n
for f in changes[3]:
filelinkrevs.setdefault(f, []).append(i)
mpm@selenic.com
Verify improvements:...
r87 ui.status("checking manifests\n")
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 for i in range(repo.manifest.count()):
n = repo.manifest.node(i)
mpm@selenic.com
Verify improvements:...
r87 for p in repo.manifest.parents(n):
if p not in repo.manifest.nodemap:
ui.warn("manifest %s has unknown parent %s\n" %
(hg.short(n), hg.short(p)))
errors += 1
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 ca = repo.changelog.node(repo.manifest.linkrev(n))
cc = manifestchangeset[n]
if ca != cc:
mpm@selenic.com
Verify improvements:...
r87 ui.warn("manifest %s points to %s, not %s\n" %
(hg.hex(n), hg.hex(ca), hg.hex(cc)))
errors += 1
try:
mpm@selenic.com
Use revlog.delta and mdiff.patchtext to massively speed up processing...
r121 delta = mdiff.patchtext(repo.manifest.delta(n))
except KeyboardInterrupt:
print "aborted"
sys.exit(0)
mpm@selenic.com
Fix two bugs in verify
r93 except Exception, inst:
mpm@selenic.com
Verify improvements:...
r87 ui.warn("unpacking manifest %s: %s\n" % (hg.short(n), inst))
errors += 1
mpm@selenic.com
Prettify the web interface...
r142
mpm@selenic.com
Use revlog.delta and mdiff.patchtext to massively speed up processing...
r121 ff = [ l.split('\0') for l in delta.splitlines() ]
for f, fn in ff:
filenodes.setdefault(f, {})[hg.bin(fn)] = 1
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
mpm@selenic.com
Verify improvements:...
r87 ui.status("crosschecking files in changesets and manifests\n")
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 for f in filenodes:
if f not in filelinkrevs:
mpm@selenic.com
Verify improvements:...
r87 ui.warn("file %s in manifest but not in changesets\n" % f)
errors += 1
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
for f in filelinkrevs:
if f not in filenodes:
mpm@selenic.com
Use revlog.delta and mdiff.patchtext to massively speed up processing...
r121 ui.warn("file %s in changeset but not in manifest\n" % f)
mpm@selenic.com
Verify improvements:...
r87 errors += 1
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
mpm@selenic.com
Verify improvements:...
r87 ui.status("checking files\n")
mpm@selenic.com
Use revlog.delta and mdiff.patchtext to massively speed up processing...
r121 ff = filenodes.keys()
ff.sort()
for f in ff:
if f == "/dev/null": continue
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 files += 1
fl = repo.file(f)
mpm@selenic.com
Verify improvements:...
r87 nodes = { hg.nullid: 1 }
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 for i in range(fl.count()):
mpm@selenic.com
fix bad assumption about uniqueness of file versions...
r224 revisions += 1
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 n = fl.node(i)
mpm@selenic.com
Make hg verify do more thorough cross-checking.
r17
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 if n not in filenodes[f]:
mpm@selenic.com
Use revlog.delta and mdiff.patchtext to massively speed up processing...
r121 ui.warn("%s: %d:%s not in manifests\n" % (f, i, hg.short(n)))
print len(filenodes[f].keys()), fl.count(), f
mpm@selenic.com
Verify improvements:...
r87 errors += 1
mpm@selenic.com
Make hg verify do more thorough cross-checking.
r17 else:
del filenodes[f][n]
flr = fl.linkrev(n)
if flr not in filelinkrevs[f]:
mpm@selenic.com
Verify improvements:...
r87 ui.warn("%s:%s points to unexpected changeset rev %d\n"
% (f, hg.short(n), fl.linkrev(n)))
errors += 1
mpm@selenic.com
Make hg verify do more thorough cross-checking.
r17 else:
filelinkrevs[f].remove(flr)
# verify contents
mpm@selenic.com
Verify improvements:...
r87 try:
t = fl.read(n)
mpm@selenic.com
Minor fixes to verify
r145 except Exception, inst:
ui.warn("unpacking file %s %s: %s\n" % (f, hg.short(n), inst))
mpm@selenic.com
Verify improvements:...
r87 errors += 1
mpm@selenic.com
Make hg verify do more thorough cross-checking.
r17 # verify parents
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 (p1, p2) = fl.parents(n)
if p1 not in nodes:
mpm@selenic.com
Verify improvements:...
r87 ui.warn("file %s:%s unknown parent 1 %s" %
(f, hg.short(n), hg.short(p1)))
errors += 1
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 if p2 not in nodes:
mpm@selenic.com
Verify improvements:...
r87 ui.warn("file %s:%s unknown parent 2 %s" %
(f, hg.short(n), hg.short(p1)))
errors += 1
mpm@selenic.com
Make hg verify do more thorough cross-checking.
r17 nodes[n] = 1
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
mpm@selenic.com
Make hg verify do more thorough cross-checking.
r17 # cross-check
for node in filenodes[f]:
mpm@selenic.com
Verify improvements:...
r87 ui.warn("node %s in manifests not in %s\n" % (hg.hex(n), f))
errors += 1
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
mpm@selenic.com
Verify improvements:...
r87 ui.status("%d files, %d changesets, %d total revisions\n" %
(files, changesets, revisions))
if errors:
mpm@selenic.com
Fix two bugs in verify
r93 ui.warn("%d integrity errors encountered!\n" % errors)
mpm@selenic.com
Verify improvements:...
r87 sys.exit(1)
mpm@selenic.com
Add 'hg serve' command for stand-alone server...
r158
elif cmd == "serve":
from mercurial import hgweb
soptions = {}
opts = [('p', 'port', 8000, 'listen port'),
('a', 'address', '', 'interface address'),
('n', 'name', os.getcwd(), 'repository name'),
('t', 'templates', "", 'template map')
]
args = fancyopts.fancyopts(args, opts, soptions,
'hg serve [options]')
hgweb.server(repo.root, soptions["name"], soptions["templates"],
soptions["address"], soptions["port"])
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
else:
mpm@selenic.com
hg: remove some debug commands, improve help messages, add .hgpaths file...
r175 if cmd: ui.warn("unknown command\n\n")
mpm@selenic.com
Give a friendlier message when repo isn't found
r18 help()
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 sys.exit(1)