[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mercurial-devel
Subject:    Re: [PATCH 4 of 9 RFC] localrepo: add a method to return markers in anamespacee
From:       Sean Farley <sean.michael.farley () gmail ! com>
Date:       2014-03-31 19:30:02
Message-ID: m2ob0mcgjp.fsf () gmail ! com
[Download RAW message or body]


David Soria Parra <davidsp@fb.com> writes:

> Sean Farley <sean.michael.farley@gmail.com> writes:
>
>> # HG changeset patch
>> # User Sean Farley <sean.michael.farley@gmail.com>
>> # Date 1396218396 18000
>> #      Sun Mar 30 17:26:36 2014 -0500
>> # Node ID 0c5c36fe392d9dfbc56ac466e312a62bdeb2bf93
>> # Parent  1bb668ecda482ee83f31d505c2094e6402668931
>> localrepo: add a method to return markers in a namespace
>>
>> diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
>> --- a/mercurial/localrepo.py
>> +++ b/mercurial/localrepo.py
>> @@ -671,10 +671,37 @@ class localrepository(object):
>>          RFC: should we allow tags and bookmarks to be set this way?
>>          '''
>>          self._createmarkernamespace(namespace)
>>          self._markers[namespace][name] = node
>>  
>> +    def markers(self, namespace=None, name=None):
>> +        '''Return markers in the namespace, otherwise return all markers.
>> +
>> +        If namespace is None, this will return a dictionary of dictionaries.
>> +
>> +        If namespace is passed but name is None, this function will return a
>> +        dictionary.
>> +
>> +        If both namespace and name are passed, this will return a value.
>> +
>> +        RFC: should this allow namespace=None and name='foo' to find all 'foo'
>> +        no matter the namespace?
>> +        '''
>> +        if namespace is None:
>> +            # create a read-only copy that adds tags and bookmarks
>> +            allmarks = self._markers.copy()
>> +            allmarks["tag"] = self.tags()
>> +            allmarks["bookmark"] = self._bookmarks
>> +            return allmarks
>> +
>> +        self._createmarkernamespace(namespace)
>> +
>> +        if name is not None:
>> +            return self._markers[namespace][name]
>> +
>> +        return self._markers[namespace]
>> +
>
> I personally think this is a bit error prone as you can accidentally
> have a name = None when passing to markers and then you suddenly get a
> dictionary instead of an expected value. I would recommend to only
> return self._markers[namespace] so people can use it as
> self.markers(namespace).get(name, default).

That's a good point. I'll rework it as you suggest. Other points about
this patch series are the two scenarios:

Where can I inject to provide a custom namespace? Should we promote
wrapping _createmarkernamespace? Or load them during during reposetup?

Where can I inject to save this custom namespace? Following the logic
from local tags, an extension could wrap localrepo.mark and write out a
file each time. What if an extension wants to add 10 marks at once? I
can't imagine writing a file 10 times in a row is good.
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@selenic.com
http://selenic.com/mailman/listinfo/mercurial-devel
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic