Submitter | Boris Feld |
---|---|
Date | Feb. 13, 2019, 2:38 p.m. |
Message ID | <9939d8e412e3e440f3b5.1550068712@Laptop-Boris.lan> |
Download | mbox | patch |
Permalink | /patch/38720/ |
State | Accepted |
Headers | show |
Comments
What can we do to make this series go forward? On 13/02/2019 15:38, Boris Feld wrote: > # HG changeset patch > # User Boris Feld <boris.feld@octobus.net> > # Date 1546394872 -3600 > # Wed Jan 02 03:07:52 2019 +0100 > # Node ID 9939d8e412e3e440f3b564fb96c187745d7a008c > # Parent 61ec4a834e2c88056ff47c0d3a7ff3bcb0f0d912 > # EXP-Topic archived-phase-UX > # Available At https://bitbucket.org/octobus/mercurial-devel/ > # hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 9939d8e412e3 > rewriting: add an option for rewrite commands to use the archived phase > > Using the archived phase for cleanup provide the same effect than stripping, > but in a faster, append-only way. > > We keep the feature experimental for now until it gets a bit more testing. > > diff --git a/mercurial/configitems.py b/mercurial/configitems.py > --- a/mercurial/configitems.py > +++ b/mercurial/configitems.py > @@ -470,6 +470,9 @@ coreconfigitem('experimental', 'bundleco > coreconfigitem('experimental', 'changegroup3', > default=False, > ) > +coreconfigitem('experimental', 'cleanup-as-archived', > + default=False, > +) > coreconfigitem('experimental', 'clientcompressionengines', > default=list, > ) > diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py > --- a/mercurial/scmutil.py > +++ b/mercurial/scmutil.py > @@ -1014,6 +1014,7 @@ def cleanupnodes(repo, replacements, ope > for phase, nodes in toadvance.items(): > phases.advanceboundary(repo, tr, phase, nodes) > > + mayusearchived = repo.ui.config('experimental', 'cleanup-as-archived') > # Obsolete or strip nodes > if obsolete.isenabled(repo, obsolete.createmarkersopt): > # If a node is already obsoleted, and we want to obsolete it > @@ -1031,6 +1032,17 @@ def cleanupnodes(repo, replacements, ope > if rels: > obsolete.createmarkers(repo, rels, operation=operation, > metadata=metadata) > + elif phases.supportinternal(repo) and mayusearchived: > + # this assume we do not have "unstable" nodes above the cleaned ones > + allreplaced = set() > + for ns in replacements.keys(): > + allreplaced.update(ns) > + if backup: > + from . import repair # avoid import cycle > + node = min(allreplaced, key=repo.changelog.rev) > + repair.backupbundle(repo, allreplaced, allreplaced, node, > + operation) > + phases.retractboundary(repo, tr, phases.archived, allreplaced) > else: > from . import repair # avoid import cycle > tostrip = list(n for ns in replacements for n in ns) > diff --git a/tests/test-phase-archived.t b/tests/test-phase-archived.t > --- a/tests/test-phase-archived.t > +++ b/tests/test-phase-archived.t > @@ -75,3 +75,69 @@ Test that bundle can unarchive a changes > date: Thu Jan 01 00:00:00 1970 +0000 > summary: root > > + > +Test that history rewriting command can use the archived phase when allowed to > +------------------------------------------------------------------------------ > + > + $ hg up 'desc(unbundletesting)' > + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved > + $ echo bar >> a > + $ hg commit --amend --config experimental.cleanup-as-archived=yes > + $ hg log -G > + @ changeset: 2:d1e73e428f29 > + | tag: tip > + | parent: 0:c1863a3840c6 > + | user: test > + | date: Thu Jan 01 00:00:00 1970 +0000 > + | summary: unbundletesting > + | > + o changeset: 0:c1863a3840c6 > + user: test > + date: Thu Jan 01 00:00:00 1970 +0000 > + summary: root > + > + $ hg log -G --hidden > + @ changeset: 2:d1e73e428f29 > + | tag: tip > + | parent: 0:c1863a3840c6 > + | user: test > + | date: Thu Jan 01 00:00:00 1970 +0000 > + | summary: unbundletesting > + | > + | o changeset: 1:883aadbbf309 > + |/ user: test > + | date: Thu Jan 01 00:00:00 1970 +0000 > + | summary: unbundletesting > + | > + o changeset: 0:c1863a3840c6 > + user: test > + date: Thu Jan 01 00:00:00 1970 +0000 > + summary: root > + > + $ ls -1 .hg/strip-backup/ > + 883aadbbf309-efc55adc-amend.hg > + 883aadbbf309-efc55adc-backup.hg > + $ hg unbundle .hg/strip-backup/883aadbbf309*amend.hg > + adding changesets > + adding manifests > + adding file changes > + added 0 changesets with 0 changes to 1 files > + (run 'hg update' to get a working copy) > + $ hg log -G > + @ changeset: 2:d1e73e428f29 > + | tag: tip > + | parent: 0:c1863a3840c6 > + | user: test > + | date: Thu Jan 01 00:00:00 1970 +0000 > + | summary: unbundletesting > + | > + | o changeset: 1:883aadbbf309 > + |/ user: test > + | date: Thu Jan 01 00:00:00 1970 +0000 > + | summary: unbundletesting > + | > + o changeset: 0:c1863a3840c6 > + user: test > + date: Thu Jan 01 00:00:00 1970 +0000 > + summary: root > + > _______________________________________________ > Mercurial-devel mailing list > Mercurial-devel@mercurial-scm.org > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Patch
diff --git a/mercurial/configitems.py b/mercurial/configitems.py --- a/mercurial/configitems.py +++ b/mercurial/configitems.py @@ -470,6 +470,9 @@ coreconfigitem('experimental', 'bundleco coreconfigitem('experimental', 'changegroup3', default=False, ) +coreconfigitem('experimental', 'cleanup-as-archived', + default=False, +) coreconfigitem('experimental', 'clientcompressionengines', default=list, ) diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -1014,6 +1014,7 @@ def cleanupnodes(repo, replacements, ope for phase, nodes in toadvance.items(): phases.advanceboundary(repo, tr, phase, nodes) + mayusearchived = repo.ui.config('experimental', 'cleanup-as-archived') # Obsolete or strip nodes if obsolete.isenabled(repo, obsolete.createmarkersopt): # If a node is already obsoleted, and we want to obsolete it @@ -1031,6 +1032,17 @@ def cleanupnodes(repo, replacements, ope if rels: obsolete.createmarkers(repo, rels, operation=operation, metadata=metadata) + elif phases.supportinternal(repo) and mayusearchived: + # this assume we do not have "unstable" nodes above the cleaned ones + allreplaced = set() + for ns in replacements.keys(): + allreplaced.update(ns) + if backup: + from . import repair # avoid import cycle + node = min(allreplaced, key=repo.changelog.rev) + repair.backupbundle(repo, allreplaced, allreplaced, node, + operation) + phases.retractboundary(repo, tr, phases.archived, allreplaced) else: from . import repair # avoid import cycle tostrip = list(n for ns in replacements for n in ns) diff --git a/tests/test-phase-archived.t b/tests/test-phase-archived.t --- a/tests/test-phase-archived.t +++ b/tests/test-phase-archived.t @@ -75,3 +75,69 @@ Test that bundle can unarchive a changes date: Thu Jan 01 00:00:00 1970 +0000 summary: root + +Test that history rewriting command can use the archived phase when allowed to +------------------------------------------------------------------------------ + + $ hg up 'desc(unbundletesting)' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo bar >> a + $ hg commit --amend --config experimental.cleanup-as-archived=yes + $ hg log -G + @ changeset: 2:d1e73e428f29 + | tag: tip + | parent: 0:c1863a3840c6 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: unbundletesting + | + o changeset: 0:c1863a3840c6 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: root + + $ hg log -G --hidden + @ changeset: 2:d1e73e428f29 + | tag: tip + | parent: 0:c1863a3840c6 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: unbundletesting + | + | o changeset: 1:883aadbbf309 + |/ user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: unbundletesting + | + o changeset: 0:c1863a3840c6 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: root + + $ ls -1 .hg/strip-backup/ + 883aadbbf309-efc55adc-amend.hg + 883aadbbf309-efc55adc-backup.hg + $ hg unbundle .hg/strip-backup/883aadbbf309*amend.hg + adding changesets + adding manifests + adding file changes + added 0 changesets with 0 changes to 1 files + (run 'hg update' to get a working copy) + $ hg log -G + @ changeset: 2:d1e73e428f29 + | tag: tip + | parent: 0:c1863a3840c6 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: unbundletesting + | + | o changeset: 1:883aadbbf309 + |/ user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: unbundletesting + | + o changeset: 0:c1863a3840c6 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: root +