[PATCH 2 of 2 RESENT] rewriting: add an option for rewrite commands to use the archived phase

Boris FELD lothiraldan at gmail.com
Thu Feb 21 04:17:57 EST 2019


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 at 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 at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list