Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/hg.py @ 302:498fb0fa2795
various fixups for git import
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
various fixups for git import
cache manifest flags properly after add
rawcommit
handle flags
handle multiple parents better
commit a complete manifest
verify
changesets and manifests are no longer necessarily 1:1
check for duplicate nodes
manifest hash: 5bf65f506d2b0da94d42d9fb1f792d58f6453c58
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCqU9wywK+sNU5EO8RApUUAJ9sXVIKMcmLChdk2M95U6DW37qNNQCgid08
/1E9Y4vw25HcxwJlXopV1lU=
=oohz
-----END PGP SIGNATURE-----
author | mpm@selenic.com |
---|---|
date | Fri, 10 Jun 2005 00:29:36 -0800 |
parents | 7c239fad0f27 |
children | 719812eb0156 |
comparison
equal
deleted
inserted
replaced
301:5add718d92db | 302:498fb0fa2795 |
---|---|
134 (f, hex(map[f]), flags[f] and "x" or '') | 134 (f, hex(map[f]), flags[f] and "x" or '') |
135 for f in files] | 135 for f in files] |
136 text = "".join(self.addlist) | 136 text = "".join(self.addlist) |
137 | 137 |
138 n = self.addrevision(text, transaction, link, p1, p2) | 138 n = self.addrevision(text, transaction, link, p1, p2) |
139 self.mapcache = (n, map) | 139 self.mapcache = (n, map, flags) |
140 self.listcache = (text, self.addlist) | 140 self.listcache = (text, self.addlist) |
141 self.addlist = None | 141 self.addlist = None |
142 | 142 |
143 return n | 143 return n |
144 | 144 |
423 raise inst | 423 raise inst |
424 | 424 |
425 def rawcommit(self, files, text, user, date, p1=None, p2=None): | 425 def rawcommit(self, files, text, user, date, p1=None, p2=None): |
426 p1 = p1 or self.dirstate.parents()[0] or nullid | 426 p1 = p1 or self.dirstate.parents()[0] or nullid |
427 p2 = p2 or self.dirstate.parents()[1] or nullid | 427 p2 = p2 or self.dirstate.parents()[1] or nullid |
428 pchange = self.changelog.read(p1) | 428 c1 = self.changelog.read(p1) |
429 pmmap = self.manifest.read(pchange[0]) | 429 c2 = self.changelog.read(p2) |
430 m1 = self.manifest.read(c1[0]) | |
431 mf1 = self.manifest.readflags(c1[0]) | |
432 m2 = self.manifest.read(c2[0]) | |
433 | |
430 tr = self.transaction() | 434 tr = self.transaction() |
431 mmap = {} | 435 mm = m1.copy() |
436 mfm = mf1.copy() | |
432 linkrev = self.changelog.count() | 437 linkrev = self.changelog.count() |
433 for f in files: | 438 for f in files: |
434 try: | 439 try: |
435 t = file(f).read() | 440 t = self.wfile(f).read() |
441 tm = is_exec(self.wjoin(f)) | |
442 r = self.file(f) | |
443 mfm[f] = tm | |
444 mm[f] = r.add(t, tr, linkrev, | |
445 m1.get(f, nullid), m2.get(f, nullid)) | |
436 except IOError: | 446 except IOError: |
437 self.ui.warn("Read file %s error, skipped\n" % f) | 447 del mm[f] |
438 continue | 448 del mfm[f] |
439 r = self.file(f) | 449 |
440 # FIXME - need to find both parents properly | 450 mnode = self.manifest.add(mm, mfm, tr, linkrev, c1[0], c2[0]) |
441 prev = pmmap.get(f, nullid) | 451 n = self.changelog.add(mnode, files, text, tr, p1, p2, user, date) |
442 mmap[f] = r.add(t, tr, linkrev, prev) | |
443 | |
444 mnode = self.manifest.add(mmap, tr, linkrev, pchange[0]) | |
445 n = self.changelog.add(mnode, files, text, tr, p1, p2, user ,date, ) | |
446 tr.close() | 452 tr.close() |
447 self.dirstate.setparents(p1, p2) | 453 self.dirstate.setparents(p1, p2) |
448 self.dirstate.clear() | 454 self.dirstate.clear() |
449 self.dirstate.update(mmap.keys(), "n") | 455 self.dirstate.update(files, "n") |
450 | 456 |
451 def commit(self, files = None, text = ""): | 457 def commit(self, files = None, text = ""): |
452 commit = [] | 458 commit = [] |
453 remove = [] | 459 remove = [] |
454 if files: | 460 if files: |
1063 os.unlink(c) | 1069 os.unlink(c) |
1064 | 1070 |
1065 def verify(self): | 1071 def verify(self): |
1066 filelinkrevs = {} | 1072 filelinkrevs = {} |
1067 filenodes = {} | 1073 filenodes = {} |
1068 manifestchangeset = {} | |
1069 changesets = revisions = files = 0 | 1074 changesets = revisions = files = 0 |
1070 errors = 0 | 1075 errors = 0 |
1071 | 1076 |
1077 seen = {} | |
1072 self.ui.status("checking changesets\n") | 1078 self.ui.status("checking changesets\n") |
1073 for i in range(self.changelog.count()): | 1079 for i in range(self.changelog.count()): |
1074 changesets += 1 | 1080 changesets += 1 |
1075 n = self.changelog.node(i) | 1081 n = self.changelog.node(i) |
1082 if n in seen: | |
1083 self.ui.warn("duplicate changeset at revision %d\n" % i) | |
1084 errors += 1 | |
1085 seen[n] = 1 | |
1086 | |
1076 for p in self.changelog.parents(n): | 1087 for p in self.changelog.parents(n): |
1077 if p not in self.changelog.nodemap: | 1088 if p not in self.changelog.nodemap: |
1078 self.ui.warn("changeset %s has unknown parent %s\n" % | 1089 self.ui.warn("changeset %s has unknown parent %s\n" % |
1079 (short(n), short(p))) | 1090 (short(n), short(p))) |
1080 errors += 1 | 1091 errors += 1 |
1082 changes = self.changelog.read(n) | 1093 changes = self.changelog.read(n) |
1083 except Exception, inst: | 1094 except Exception, inst: |
1084 self.ui.warn("unpacking changeset %s: %s\n" % (short(n), inst)) | 1095 self.ui.warn("unpacking changeset %s: %s\n" % (short(n), inst)) |
1085 errors += 1 | 1096 errors += 1 |
1086 | 1097 |
1087 manifestchangeset[changes[0]] = n | |
1088 for f in changes[3]: | 1098 for f in changes[3]: |
1089 filelinkrevs.setdefault(f, []).append(i) | 1099 filelinkrevs.setdefault(f, []).append(i) |
1090 | 1100 |
1101 seen = {} | |
1091 self.ui.status("checking manifests\n") | 1102 self.ui.status("checking manifests\n") |
1092 for i in range(self.manifest.count()): | 1103 for i in range(self.manifest.count()): |
1093 n = self.manifest.node(i) | 1104 n = self.manifest.node(i) |
1105 if n in seen: | |
1106 self.ui.warn("duplicate manifest at revision %d\n" % i) | |
1107 errors += 1 | |
1108 seen[n] = 1 | |
1109 | |
1094 for p in self.manifest.parents(n): | 1110 for p in self.manifest.parents(n): |
1095 if p not in self.manifest.nodemap: | 1111 if p not in self.manifest.nodemap: |
1096 self.ui.warn("manifest %s has unknown parent %s\n" % | 1112 self.ui.warn("manifest %s has unknown parent %s\n" % |
1097 (short(n), short(p))) | 1113 (short(n), short(p))) |
1098 errors += 1 | 1114 errors += 1 |
1099 ca = self.changelog.node(self.manifest.linkrev(n)) | |
1100 cc = manifestchangeset[n] | |
1101 if ca != cc: | |
1102 self.ui.warn("manifest %s points to %s, not %s\n" % | |
1103 (hex(n), hex(ca), hex(cc))) | |
1104 errors += 1 | |
1105 | 1115 |
1106 try: | 1116 try: |
1107 delta = mdiff.patchtext(self.manifest.delta(n)) | 1117 delta = mdiff.patchtext(self.manifest.delta(n)) |
1108 except KeyboardInterrupt: | 1118 except KeyboardInterrupt: |
1109 print "aborted" | 1119 print "aborted" |
1134 for f in ff: | 1144 for f in ff: |
1135 if f == "/dev/null": continue | 1145 if f == "/dev/null": continue |
1136 files += 1 | 1146 files += 1 |
1137 fl = self.file(f) | 1147 fl = self.file(f) |
1138 nodes = { nullid: 1 } | 1148 nodes = { nullid: 1 } |
1149 seen = {} | |
1139 for i in range(fl.count()): | 1150 for i in range(fl.count()): |
1140 revisions += 1 | 1151 revisions += 1 |
1141 n = fl.node(i) | 1152 n = fl.node(i) |
1153 | |
1154 if n in seen: | |
1155 self.ui.warn("%s: duplicate revision %d\n" % (f, i)) | |
1156 errors += 1 | |
1142 | 1157 |
1143 if n not in filenodes[f]: | 1158 if n not in filenodes[f]: |
1144 self.ui.warn("%s: %d:%s not in manifests\n" | 1159 self.ui.warn("%s: %d:%s not in manifests\n" |
1145 % (f, i, short(n))) | 1160 % (f, i, short(n))) |
1146 print len(filenodes[f].keys()), fl.count(), f | 1161 print len(filenodes[f].keys()), fl.count(), f |