AUTHOR_HG_RE = re.compile('^(.*?) ?<(.*?)(?:>(.+)?)?$')
RAW_AUTHOR_RE = re.compile('^(\w+) (?:(.+)? )?<(.*)> (\d+) ([+-]\d+)')
+VERSION = 1
+
def die(msg, *args):
sys.stderr.write('ERROR: %s\n' % (msg % args))
sys.exit(1)
def hghex(node):
return hg.node.hex(node)
+def hgbin(node):
+ return hg.node.bin(node)
+
def hgref(ref):
return ref.replace('___', ' ')
def __init__(self, path):
self.path = path
+ self.clear()
+ self.load()
+
+ if self.version < VERSION:
+ self.clear()
+ self.version = VERSION
+
+ def clear(self):
self.tips = {}
self.marks = {}
self.rev_marks = {}
self.last_mark = 0
-
- self.load()
+ self.version = 0
def load(self):
if not os.path.exists(self.path):
self.tips = tmp['tips']
self.marks = tmp['marks']
self.last_mark = tmp['last-mark']
+ self.version = tmp.get('version', 1)
for rev, mark in self.marks.iteritems():
self.rev_marks[mark] = int(rev)
def dict(self):
- return { 'tips': self.tips, 'marks': self.marks, 'last-mark' : self.last_mark }
+ return { 'tips': self.tips, 'marks': self.marks, 'last-mark' : self.last_mark, 'version' : self.version }
def store(self):
json.dump(self.dict(), open(self.path, 'w'))
removed = set()
# load earliest manifest first for caching reasons
- prev = repo[parent].manifest().copy()
+ prev = parent.manifest().copy()
cur = ctx.manifest()
for fn in cur:
revs = xrange(tip, head.rev() + 1)
count = 0
- revs = [rev for rev in revs if not marks.is_marked(rev)]
-
for rev in revs:
c = repo[rev]
- (manifest, user, (time, tz), files, desc, extra) = repo.changelog.read(c.node())
+ node = c.node()
+
+ if marks.is_marked(c.hex()):
+ count += 1
+ continue
+
+ (manifest, user, (time, tz), files, desc, extra) = repo.changelog.read(node)
rev_branch = extra['branch']
author = "%s %d %s" % (fixup_user(user), time, gittz(tz))
else:
committer = author
- parents = [p for p in repo.changelog.parentrevs(rev) if p >= 0]
+ parents = [repo[p] for p in repo.changelog.parentrevs(rev) if p >= 0]
if len(parents) == 0:
modified = c.manifest().keys()
print desc
if len(parents) > 0:
- print "from :%s" % (rev_to_mark(parents[0]))
+ print "from :%s" % (rev_to_mark(parents[0].rev()))
if len(parents) > 1:
- print "merge :%s" % (rev_to_mark(parents[1]))
+ print "merge :%s" % (rev_to_mark(parents[1].rev()))
for f in modified_final:
print "M %s :%u %s" % f
# make sure the ref is updated
print "reset %s/%s" % (prefix, ename)
- print "from :%u" % rev_to_mark(rev)
+ print "from :%u" % rev_to_mark(head.rev())
print
- marks.set_tip(ename, rev)
+ marks.set_tip(ename, head.rev())
def export_tag(repo, tag):
export_ref(repo, tag, 'tags', repo[hgref(tag)])
tmp = encoding.encoding
encoding.encoding = 'utf-8'
- node = repo.commitctx(ctx)
+ node = hghex(repo.commitctx(ctx))
encoding.encoding = tmp
parser.next()
node = parser.repo.changelog.node(mark_to_rev(from_mark))
- parsed_refs[ref] = node
+ parsed_refs[ref] = hghex(node)
def parse_tag(parser):
name = parser[1]
data = fctx.data()
except error.ManifestLookupError:
data = ""
- content = data + "%s %s\n" % (hghex(node), tag)
+ content = data + "%s %s\n" % (node, tag)
return context.memfilectx(f, content, False, False, None)
p1 = tip.hex()
die('unhandled export command: %s' % line)
for ref, node in parsed_refs.iteritems():
+ bnode = hgbin(node)
if ref.startswith('refs/heads/branches'):
branch = ref[len('refs/heads/branches/'):]
- if branch in branches and node in branches[branch]:
+ if branch in branches and bnode in branches[branch]:
# up to date
continue
print "ok %s" % ref
author, msg = parsed_tags.get(tag, (None, None))
if mode == 'git':
if not msg:
- msg = 'Added tag %s for changeset %s' % (tag, hghex(node[:6]));
+ msg = 'Added tag %s for changeset %s' % (tag, node[:12]);
write_tag(parser.repo, tag, node, msg, author)
else:
fp = parser.repo.opener('localtags', 'a')
- fp.write('%s %s\n' % (hghex(node), tag))
+ fp.write('%s %s\n' % (node, tag))
fp.close()
print "ok %s" % ref
else:
# handle bookmarks
for bmark, node in p_bmarks:
ref = 'refs/heads/' + bmark
- new = hghex(node)
+ new = node
if bmark in bmarks:
old = bmarks[bmark].hex()