[PATCH 2 of 7 upgraderepo V2] debugcommands: stub for debugupgraderepo command

Augie Fackler raf at durin42.com
Tue Dec 13 11:06:47 EST 2016


On Mon, Dec 12, 2016 at 09:18:51PM -0800, Gregory Szorc wrote:
> On Mon, Dec 12, 2016 at 2:17 AM, Pierre-Yves David <
> pierre-yves.david at ens-lyon.org> wrote:
>
> >
> >
> > On 11/25/2016 04:28 AM, Gregory Szorc wrote:
> >
> >> # HG changeset patch
> >> # User Gregory Szorc <gregory.szorc at gmail.com>
> >> # Date 1480033449 28800
> >> #      Thu Nov 24 16:24:09 2016 -0800
> >> # Node ID 4fffbdc2bca22e666482b55562c0e592c8a68027
> >> # Parent  c60995fce14b0e34bd1416dab3712a6c33bb29bb
> >> debugcommands: stub for debugupgraderepo command
> >>
> >> Currently, if Mercurial introduces a new repository/store feature or
> >> changes behavior of an existing feature, users must perform an
> >> `hg clone` to create a new repository with hopefully the
> >> correct/optimal settings. Unfortunately, even `hg clone` may not
> >> give the correct results. For example, if you do a local `hg clone`,
> >> you may get hardlinks to revlog files that inherit the old state.
> >> If you `hg clone` from a remote or `hg clone --pull`, changegroup
> >> application may bypass some optimization, such as converting to
> >> generaldelta.
> >>
> >> Optimizing a repository is harder than it seems and requires more
> >> than a simple `hg` command invocation.
> >>
> >> This commit starts the process of changing that. We introduce
> >> `hg debugupgraderepo`, a command that performs an in-place upgrade
> >> of a repository to use new, optimal features. The command is just
> >> a stub right now. Features will be added in subsequent commits.
> >>
> >
> > I like the idea of this commit, this should probably be the first one in
> > the stack. The revlog cloning feature can be delayed later in the stack
> > until we actually start performing upgrade.
> >
> > This commit does foreshadow some of the behavior of the new command,
> >> notably that it doesn't do anything by default and that it takes
> >> arguments that influence what actions it performs. These will be
> >> explained more in subsequent commits.
> >>
> >> diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py
> >> --- a/mercurial/debugcommands.py
> >> +++ b/mercurial/debugcommands.py
> >> @@ -849,3 +849,28 @@ def debugdeltachain(ui, repo, file_=None
> >>                   extradist=extradist, extraratio=extraratio)
> >>
> >>      fm.end()
> >> +
> >> + at command('debugupgraderepo', [
> >> +    ('o', 'optimize', [], _('extra optimization to perform'), _('NAME')),
> >> +    ('', 'run', False, _('performs an upgrade')),
> >>
> >
> > We should drop these option from the command until we actually use them
> > this will allow to discuss them with their actual behavior.
> >
> > +])
> >> +def debugupgraderepo(ui, repo, run=False, optimize=None):
> >> +    """upgrade a repository to use different features
> >> +
> >> +    If no arguments are specified, the repository is evaluated for
> >> upgrade
> >> +    and a list of problems and potential optimizations is printed.
> >> +
> >> +    With ``--run``, a repository upgrade is performed. Behavior of the
> >> upgrade
> >> +    can be influenced via additional arguments. More details will be
> >> provided
> >> +    by the command output when run without ``--run``.
> >>
> >
> > (I would also delayed the help about --run until we actually run something)
> >
> > +
> >> +    During the upgrade, the repository will be locked and no writes will
> >> be
> >> +    allowed.
> >> +
> >> +    At the end of the upgrade, the repository may not be readable while
> >> new
> >> +    repository data is swapped in. This window will be as long as it
> >> takes to
> >> +    rename some directories inside the ``.hg`` directory. On most
> >> machines, this
> >> +    should complete almost instantaneously and the chances of a consumer
> >> being
> >> +    unable to access the repository should be low.
> >>
> >
> > (I would also delay that doc until we actually behave that way)
> > I know it would bot solve "everything" but we discussed the option of
> > having a "repositorybeingupgraded" (or similar) in .hg/required to reduce
> > the change for a reader to access the repository at that time.
> >
>
> I added all this code and documentation to foreshadow the feature so a
> reviewer isn't guessing where things are going. It also cuts down on the
> amount of patches and/or churn in future patches, making code review
> easier, IMO. I think it is busy work to change it at this stage. But if you
> insist, I will.

I liked having the documentation early in the stack, for what it's worth.

>
>
> >
> > +    """
> >> +    raise error.Abort(_('not yet implemented'))
> >> diff --git a/tests/test-completion.t b/tests/test-completion.t
> >> --- a/tests/test-completion.t
> >> +++ b/tests/test-completion.t
> >> @@ -109,6 +109,7 @@ Show debug commands if there are no othe
> >>    debugsub
> >>    debugsuccessorssets
> >>    debugtemplate
> >> +  debugupgraderepo
> >>    debugwalk
> >>    debugwireargs
> >>
> >> @@ -274,6 +275,7 @@ Show all commands + options
> >>    debugsub: rev
> >>    debugsuccessorssets:
> >>    debugtemplate: rev, define
> >> +  debugupgraderepo: optimize, run
> >>    debugwalk: include, exclude
> >>    debugwireargs: three, four, five, ssh, remotecmd, insecure
> >>    files: rev, print0, include, exclude, template, subrepos
> >> diff --git a/tests/test-help.t b/tests/test-help.t
> >> --- a/tests/test-help.t
> >> +++ b/tests/test-help.t
> >> @@ -916,6 +916,8 @@ Test list of internal help commands
> >>                   show set of successors for revision
> >>     debugtemplate
> >>                   parse and apply a template
> >> +   debugupgraderepo
> >> +                 upgrade a repository to use different features
> >>     debugwalk     show how files match on given patterns
> >>     debugwireargs
> >>                   (no help text available)
> >> diff --git a/tests/test-upgrade-repo.t b/tests/test-upgrade-repo.t
> >> new file mode 100644
> >> --- /dev/null
> >> +++ b/tests/test-upgrade-repo.t
> >> @@ -0,0 +1,5 @@
> >> +  $ hg init empty
> >> +  $ cd empty
> >> +  $ hg debugupgraderepo
> >> +  abort: not yet implemented
> >> +  [255]
> >> _______________________________________________
> >> Mercurial-devel mailing list
> >> Mercurial-devel at mercurial-scm.org
> >> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
> >>
> >>
> > --
> > Pierre-Yves David
> >

> _______________________________________________
> 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