[PATCH] namespaces: add logname member to namespace object

Augie Fackler raf at durin42.com
Fri Jan 16 09:29:56 CST 2015


On Wed, Jan 14, 2015 at 04:49:25PM -0800, Sean Farley wrote:
> # HG changeset patch
> # User Sean Farley <sean.michael.farley at gmail.com>
> # Date 1421281900 28800
> #      Wed Jan 14 16:31:40 2015 -0800
> # Node ID 0508ab9d59758c22fa968d3bc2a184c51dd2c7ff
> # Parent  f6070d3a9cb89a50ae3112f7c3d22f4ccc5c4db7
> namespaces: add logname member to namespace object
>
> Previously, there was no way to change the name used for 'hg log' output. This
> was inconvenient for extensions that want a template name longer than 12
> characters (e.g. remotebookmarks) but a different name for 'hg log'.

If/when we se a new version of htis, could you give an example of what
a regular vs logname might look like? I wrote remotebranches and I
can't come up with an example offhand.

>
> diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
> --- a/mercurial/cmdutil.py
> +++ b/mercurial/cmdutil.py
> @@ -914,16 +914,16 @@ class changeset_printer(object):
>          for name, ns in self.repo.names.iteritems():
>              # branches has special logic already handled above, so here we just
>              # skip it
>              if name == 'branches':
>                  continue
> -            # we will use the templatename as the color name since those two
> -            # should be the same
> +            # we will use the logname as the color name since those two should
> +            # be the same
>              for name in ns.names(self.repo, changenode):
>                  # i18n: column positioning for "hg log"
> -                tname = _(("%s:" % ns.templatename).ljust(13) + "%s\n") % name
> -                self.ui.write("%s" % tname, label='log.%s' % ns.templatename)
> +                lname = _(("%s:" % ns.logname).ljust(13) + "%s\n") % name
> +                self.ui.write("%s" % lname, label='log.%s' % ns.logname)
>          if self.ui.debugflag:
>              # i18n: column positioning for "hg log"
>              self.ui.write(_("phase:       %s\n") % _(ctx.phasestr()),
>                            label='log.phase')
>          for parent in parents:
> diff --git a/mercurial/namespaces.py b/mercurial/namespaces.py
> --- a/mercurial/namespaces.py
> +++ b/mercurial/namespaces.py
> @@ -25,23 +25,23 @@ class namespaces(object):
>          # shorten the class name for less indentation
>          ns = namespace
>
>          # we need current mercurial named objects (bookmarks, tags, and
>          # branches) to be initialized somewhere, so that place is here
> -        n = ns("bookmarks", "bookmark",
> +        n = ns("bookmarks", "bookmark", "bookmark",
>                 lambda repo: repo._bookmarks.keys(),
>                 lambda repo, name: tolist(repo._bookmarks.get(name)),
>                 lambda repo, name: repo.nodebookmarks(name))
>          self.addnamespace(n)
>
> -        n = ns("tags", "tag",
> +        n = ns("tags", "tag", "tag",
>                 lambda repo: [t for t, n in repo.tagslist()],
>                 lambda repo, name: tolist(repo._tagscache.tags.get(name)),
>                 lambda repo, name: repo.nodetags(name))
>          self.addnamespace(n)
>
> -        n = ns("branches", "branch",
> +        n = ns("branches", "branch", "branch",
>                 lambda repo: repo.branchmap().keys(),
>                 lambda repo, name: tolist(repo.branchtip(name, True)),
>                 lambda repo, node: [repo[node].branch()])
>          self.addnamespace(n)
>
> @@ -118,22 +118,25 @@ class namespace(object):
>        'namemap': function that takes a name and returns a list of nodes
>        'nodemap': function that takes a node and returns a list of names
>
>      """
>
> -    def __init__(self, name, templatename, listnames, namemap, nodemap):
> +    def __init__(self, name, templatename, logname, listnames, namemap,
> +                 nodemap):
>          """create a namespace
>
>          name: the namespace to be registered (in plural form)
>          listnames: function to list all names
>          templatename: the name to use for templating
> +        logname: the name to use for log output
>          namemap: function that inputs a node, output name(s)
>          nodemap: function that inputs a name, output node(s)
>
>          """
>          self.name = name
>          self.templatename = templatename
> +        self.logname = logname
>          self.listnames = listnames
>          self.namemap = namemap
>          self.nodemap = nodemap
>
>      def names(self, repo, node):
> diff --git a/tests/test-log.t b/tests/test-log.t
> --- a/tests/test-log.t
> +++ b/tests/test-log.t
> @@ -1565,11 +1565,11 @@ Check that adding an arbitrary name show
>    > """A small extension to test adding arbitrary names to a repo"""
>    > from mercurial.namespaces import namespace
>    >
>    > def reposetup(ui, repo):
>    >     foo = {'foo': repo[0].node()}
> -  >     ns = namespace("bars", "bar",
> +  >     ns = namespace("bars", "bar", "bar",
>    >                    lambda r: foo.keys(),
>    >                    lambda r, name: foo.get(name),
>    >                    lambda r, node: [name for name, n
>    >                                     in foo.iteritems()
>    >                                     if n == node])
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list