From e6c479c1363e1d26f722d09a7908e9f718df34dd Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Tue, 14 Mar 2023 04:10:54 -0600 Subject: [PATCH 1/6] Cleanup timezone stuff No functional changes. Signed-off-by: Felipe Contreras --- git-remote-hg | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/git-remote-hg b/git-remote-hg index ce83b14..eb1881b 100755 --- a/git-remote-hg +++ b/git-remote-hg @@ -101,16 +101,12 @@ def gitmode(flags): return b'l' in flags and '120000' or b'x' in flags and '100755' or '100644' def gittz(tz): - sign = 1 if tz >= 0 else -1 - hours, minutes = divmod(abs(tz), 60 * 60) - return '%+03d%02d' % (-sign * hours, minutes / 60) + tz /= 60.0 + return '%+03d%02d' % (tz / -60, tz % 60) def hgtz(tz): - tz = int(tz) - sign = 1 if tz >= 0 else -1 - hours, minutes = divmod(abs(tz), 100) - tz = hours * 60 * 60 + minutes * 60 - return -sign * tz + sign = -1 if tz[0] == '-' else 1 + return sign * (int(tz[-4:-2]) * 60 + int(tz[-2:])) * -60 def hgmode(mode): m = { '100755': 'x', '120000': 'l' } From 995179444c11d5d680b4aa1e82ad94ef628ca2c0 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Mon, 20 Mar 2023 01:37:49 -0600 Subject: [PATCH 2/6] Trivial simplification When there's no parents the files are the same as the manifest. Signed-off-by: Felipe Contreras --- git-remote-hg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-remote-hg b/git-remote-hg index eb1881b..51c3ae9 100755 --- a/git-remote-hg +++ b/git-remote-hg @@ -507,7 +507,7 @@ def export_ref(repo, name, kind, head): parents = [repo[p] for p in repo.changelog.parentrevs(rev) if p >= 0] if len(parents) == 0: - modified = c.manifest().keys() + modified = files removed = [] else: modified, removed = get_filechanges(repo, c, parents[0]) From 740c681c1ddf71e592e1fdfce47e3bfff6600749 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Mon, 20 Mar 2023 01:39:33 -0600 Subject: [PATCH 3/6] Trivial style change More idiomatic. Signed-off-by: Felipe Contreras --- git-remote-hg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-remote-hg b/git-remote-hg index 51c3ae9..91604c3 100755 --- a/git-remote-hg +++ b/git-remote-hg @@ -506,7 +506,7 @@ def export_ref(repo, name, kind, head): parents = [repo[p] for p in repo.changelog.parentrevs(rev) if p >= 0] - if len(parents) == 0: + if not parents: modified = files removed = [] else: From 4ad9c8d70ca8d7273499031e01267f98baf18934 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Mon, 20 Mar 2023 01:44:13 -0600 Subject: [PATCH 4/6] Reorganize get_filechanges So it's more extensible. Signed-off-by: Felipe Contreras --- git-remote-hg | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/git-remote-hg b/git-remote-hg index 91604c3..9559b0a 100755 --- a/git-remote-hg +++ b/git-remote-hg @@ -309,25 +309,30 @@ def export_files(files): return final -def get_filechanges(repo, ctx, parent): - modified = set() - added = set() - removed = set() +def get_filechanges(repo, ctx, parents, files): + if not parents: + modified = files + removed = [] + return modified, removed + else: + modified = set() + added = set() + removed = set() - # load earliest manifest first for caching reasons - prev = parent.manifest().copy() - cur = ctx.manifest() + # load earliest manifest first for caching reasons + prev = parents[0].manifest().copy() + cur = ctx.manifest() - for fn in cur: - if fn in prev: - if (cur.flags(fn) != prev.flags(fn) or cur[fn] != prev[fn]): - modified.add(fn) - del prev[fn] - else: - added.add(fn) - removed |= set(prev.keys()) + for fn in cur: + if fn in prev: + if (cur.flags(fn) != prev.flags(fn) or cur[fn] != prev[fn]): + modified.add(fn) + del prev[fn] + else: + added.add(fn) + removed |= set(prev.keys()) - return added | modified, removed + return added | modified, removed def fixup_user_git(user): name = mail = None @@ -506,11 +511,7 @@ def export_ref(repo, name, kind, head): parents = [repo[p] for p in repo.changelog.parentrevs(rev) if p >= 0] - if not parents: - modified = files - removed = [] - else: - modified, removed = get_filechanges(repo, c, parents[0]) + modified, removed = get_filechanges(repo, c, parents, files) desc += b'\n' From 33dccdfab06b4b7cbb12d4ca4a710bdedf272335 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Mon, 20 Mar 2023 01:47:48 -0600 Subject: [PATCH 5/6] Simplify get_filechanges No functional changes. Signed-off-by: Felipe Contreras --- git-remote-hg | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/git-remote-hg b/git-remote-hg index 9559b0a..7bb7e25 100755 --- a/git-remote-hg +++ b/git-remote-hg @@ -311,13 +311,9 @@ def export_files(files): def get_filechanges(repo, ctx, parents, files): if not parents: - modified = files - removed = [] - return modified, removed + return files, [] else: modified = set() - added = set() - removed = set() # load earliest manifest first for caching reasons prev = parents[0].manifest().copy() @@ -329,10 +325,9 @@ def get_filechanges(repo, ctx, parents, files): modified.add(fn) del prev[fn] else: - added.add(fn) - removed |= set(prev.keys()) + modified.add(fn) - return added | modified, removed + return modified, prev.keys() def fixup_user_git(user): name = mail = None From 8025945a62d16ef078299ad5903081f250d762ed Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Mon, 20 Mar 2023 01:52:19 -0600 Subject: [PATCH 6/6] Simpler get_filechanges algorithm The status method achieves the same thing as the current code. Signed-off-by: Felipe Contreras --- git-remote-hg | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/git-remote-hg b/git-remote-hg index 7bb7e25..d32b822 100755 --- a/git-remote-hg +++ b/git-remote-hg @@ -313,21 +313,8 @@ def get_filechanges(repo, ctx, parents, files): if not parents: return files, [] else: - modified = set() - - # load earliest manifest first for caching reasons - prev = parents[0].manifest().copy() - cur = ctx.manifest() - - for fn in cur: - if fn in prev: - if (cur.flags(fn) != prev.flags(fn) or cur[fn] != prev[fn]): - modified.add(fn) - del prev[fn] - else: - modified.add(fn) - - return modified, prev.keys() + stat = parents[0].status(ctx) + return stat.modified + stat.added, stat.removed def fixup_user_git(user): name = mail = None