/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/git/config.py

Support reading user identity from .git/config in git repositories.

Merged from https://code.launchpad.net/~jelmer/brz/local-git-email/+merge/380997

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
        return self._get_best_value('_get_user_id')
47
47
 
48
48
 
 
49
class GitConfigSectionDefault(config.Section):
 
50
    """The "default" config section in git config file"""
 
51
 
 
52
    def __init__(self, config):
 
53
        self._config = config
 
54
 
 
55
    def get(self, name, default=None, expand=True):
 
56
        if name == 'email':
 
57
            try:
 
58
                email = self._config.get((b'user', ), b'email')
 
59
            except KeyError:
 
60
                return None
 
61
            try:
 
62
                name = self._config.get((b'user', ), b'name')
 
63
            except KeyError:
 
64
                return email.decode()
 
65
            return '%s <%s>' % (name.decode(), email.decode())
 
66
        return None
 
67
 
 
68
 
 
69
class GitConfigStore(config.Store):
 
70
    """Store that uses gitconfig."""
 
71
 
 
72
    def __init__(self, config):
 
73
        self._config = config
 
74
 
 
75
    def get_sections(self):
 
76
        return [
 
77
            (self, GitConfigSectionDefault(self._config)),
 
78
            ]
 
79
 
 
80
 
49
81
class GitBranchStack(config._CompatibleStack):
50
82
    """GitBranch stack."""
51
83
 
52
84
    def __init__(self, branch):
 
85
        section_getters = [self._get_overrides]
53
86
        lstore = config.LocationStore()
54
87
        loc_matcher = config.LocationMatcher(lstore, branch.base)
 
88
        section_getters.append(loc_matcher.get_sections)
55
89
        # FIXME: This should also be looking in .git/config for
56
90
        # local git branches.
 
91
        git = getattr(branch.repository, '_git', None)
 
92
        if git:
 
93
            cstore = GitConfigStore(git.get_config())
 
94
            section_getters.append(cstore.get_sections)
57
95
        gstore = config.GlobalStore()
 
96
        section_getters.append(gstore.get_sections)
58
97
        super(GitBranchStack, self).__init__(
59
 
            [self._get_overrides,
60
 
             loc_matcher.get_sections,
61
 
             gstore.get_sections],
 
98
            section_getters,
62
99
            # All modifications go to the corresponding section in
63
100
            # locations.conf
64
101
            lstore, branch.base)