[PATCH 2 of 2] paths: Added 'force-alias' option in ui.expandpaths()
Augie Fackler
durin42 at gmail.com
Tue Nov 15 16:43:42 UTC 2011
On Tue, Nov 15, 2011 at 10:36 AM, Victor Suba <vosuba at gmail.com> wrote:
> On Tue, Nov 15, 2011 at 6:29 AM, Augie Fackler <durin42 at gmail.com> wrote:
>> I'd love to see this as an extension first (presumably storing to
>> someplace other than
>> .hg/hgrc) so we could get a feel for the feature without having to make a
>> permanent
>> behavior change in core. It's similar to a feature I've tinkered with in
>> the past, but
>> could never get right.
> I've refactored and simplified the changes so I think it wouldn't be hard to
> make
> it an extension.
> How do you normally feel about adding some hook points in the core that an
> extension
> would use?
I'd be a fan, but I'm not part of crew, so you'll still need someone else to +1.
> On Tue, Nov 15, 2011 at 6:29 AM, Augie Fackler <durin42 at gmail.com> wrote:
>>
>> On Nov 13, 2011, at 2:31 PM, Victor Suba wrote:
>>
>> > # HG changeset patch
>> > # User Victor Suba <vosuba at gmail.com>
>> > # Date 1321214772 28800
>> > # Node ID fcf006b1cfce252573d0e461595cd61fa366e56b
>> > # Parent 64efea9f1a8cc6caf370b3967d2b22ac36e9e5de
>> > paths: Added 'force-alias' option in ui.expandpaths()
>> > to force creation of a path alias if one doesn't already
>> > exist. Applied it as default to "hg pull", "hg incoming"
>> > and "hg identify".
>>
>> I'd love to see this as an extension first (presumably storing to
>> someplace other than .hg/hgrc) so we could get a feel for the feature
>> without having to make a permanent behavior change in core. It's similar to
>> a feature I've tinkered with in the past, but could never get right.
>>
>> > diff -r 64efea9f1a8c -r fcf006b1cfce mercurial/commands.py
>> > --- a/mercurial/commands.py Sun Nov 13 01:44:28 2011 -0800
>> > +++ b/mercurial/commands.py Sun Nov 13 12:06:12 2011 -0800
>> > @@ -3283,7 +3283,9 @@
>> > revs = []
>> >
>> > if source:
>> > - source, branches = hg.parseurl(ui.expandpath(source))
>> > + pathinfo = {'force-alias': True}
>> > + source = ui.expandpath(source, pathinfo=pathinfo)
>> > + source, branches = hg.parseurl(source)
>> > repo = hg.peer(ui, {}, source)
>> > revs, checkout = hg.addbranchrevs(repo, repo, branches, None)
>> >
>> > @@ -3649,7 +3651,9 @@
>> > raise util.Abort(_('cannot combine --bundle and --subrepos'))
>> >
>> > if opts.get('bookmarks'):
>> > - source, branches = hg.parseurl(ui.expandpath(source),
>> > + pathinfo = {'force-alias': True}
>> > + source = ui.expandpath(source, pathinfo=pathinfo)
>> > + source, branches = hg.parseurl(source,
>> > opts.get('branch'))
>> > other = hg.peer(repo, opts, source)
>> > if 'bookmarks' not in other.listkeys('namespaces'):
>> > @@ -4255,7 +4259,9 @@
>> >
>> > Returns 0 on success, 1 if an update had unresolved files.
>> > """
>> > - source, branches = hg.parseurl(ui.expandpath(source),
>> > opts.get('branch'))
>> > + pathinfo = {'force-alias': True}
>> > + source = ui.expandpath(source, pathinfo=pathinfo)
>> > + source, branches = hg.parseurl(source, opts.get('branch'))
>> > other = hg.peer(repo, opts, source)
>> > ui.status(_('pulling from %s\n') % util.hidepassword(source))
>> > revs, checkout = hg.addbranchrevs(repo, other, branches,
>> > opts.get('rev'))
>> > diff -r 64efea9f1a8c -r fcf006b1cfce mercurial/hg.py
>> > --- a/mercurial/hg.py Sun Nov 13 01:44:28 2011 -0800
>> > +++ b/mercurial/hg.py Sun Nov 13 12:06:12 2011 -0800
>> > @@ -441,7 +441,9 @@
>> > (remoterepo, incomingchangesetlist, displayer) parameters,
>> > and is supposed to contain only code that can't be unified.
>> > """
>> > - source, branches = parseurl(ui.expandpath(source),
>> > opts.get('branch'))
>> > + pathinfo = {'force-alias': True}
>> > + source = ui.expandpath(source, pathinfo=pathinfo)
>> > + source, branches = parseurl(source, opts.get('branch'))
>> > other = peer(repo, opts, source)
>> > ui.status(_('comparing with %s\n') % util.hidepassword(source))
>> > revs, checkout = addbranchrevs(repo, other, branches,
>> > opts.get('rev'))
>> > diff -r 64efea9f1a8c -r fcf006b1cfce mercurial/ui.py
>> > --- a/mercurial/ui.py Sun Nov 13 01:44:28 2011 -0800
>> > +++ b/mercurial/ui.py Sun Nov 13 12:06:12 2011 -0800
>> > @@ -428,17 +428,56 @@
>> >
>> > return [(alias, paths[alias]) for alias in sorted(paths.keys())]
>> >
>> > - def expandpath(self, loc, default=None):
>> > + def reversepath(self, path, forceAlias):
>> > + """Reverse search from path to path alias, and if there isn't
>> > anything
>> > + create a new alias"""
>> > + seen = set()
>> > + for alias, url in self.configitems("paths"):
>> > + if path == url:
>> > + return alias
>> > + seen.add(alias)
>> > + for alias, url in self._paths.items():
>> > + if path == url:
>> > + return alias
>> > + seen.add(alias)
>> > +
>> > + if forceAlias:
>> > + i = 0
>> > + while True:
>> > + alias = 'remote%d' % i
>> > + if alias not in seen:
>> > + self._paths[alias] = path
>> > + self.writePaths()
>> > + self.status(_("created new path alias '%s' ->
>> > '%s'\n" % (alias, util.hidepassword(path))))
>> > + return alias
>> > + i += 1
>> > + else:
>> > + return None
>> > +
>> > +
>> > + def expandpath(self, loc, default=None, pathinfo={}):
>> > """Return repository location relative to cwd or from [paths]"""
>> > + #ToDo: Teach expandpath about the url#branch format
>> > if util.hasscheme(loc) or os.path.isdir(os.path.join(loc,
>> > '.hg')):
>> > - return loc
>> > + pathinfo['alias'] = self.reversepath(loc,
>> > pathinfo.get('force-alias', False))
>> >
>> > path = self.config('paths', loc)
>> > - if not path:
>> > - path = self._paths.get(loc, None)
>> > + if not path: path = self._paths.get(loc, None)
>> > if not path and default is not None:
>> > path = self.config('paths', default)
>> > - return path or loc
>> > + if path:
>> > + loc = default
>> > +
>> > + if path:
>> > + # Update the path alias in .hg/paths if it's not there
>> > + if self._paths.get(loc, None) != path:
>> > + self._paths[loc] = path
>> > + self.writePaths()
>> > + pathinfo['alias'] = loc
>> > + return path
>> > + else:
>> > + pathinfo['alias'] = self.reversepath(loc,
>> > pathinfo.get('force-alias', False))
>> > + return loc
>> >
>> > def pushbuffer(self):
>> > self._buffers.append([])
>> > _______________________________________________
>> > Mercurial-devel mailing list
>> > Mercurial-devel at selenic.com
>> > http://selenic.com/mailman/listinfo/mercurial-devel
>>
>
>
More information about the Mercurial-devel
mailing list