/breezy/unstable

To get this branch, use:
bzr branch https://code.breezy-vcs.org/breezy/unstable

« back to all changes in this revision

Viewing changes to breezy/plugins/fastimport/user_mapper.py

  • Committer: Jelmer Vernooij
  • Date: 2017-05-24 01:39:33 UTC
  • mfrom: (3815.3776.6)
  • Revision ID: jelmer@jelmer.uk-20170524013933-ir4y4tqtrsiz2ka2
New upstream snapshot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2009 Canonical Ltd
 
2
#
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
15
 
 
16
from __future__ import absolute_import
 
17
 
 
18
from email import Utils
 
19
 
 
20
 
 
21
class UserMapper(object):
 
22
 
 
23
    def __init__(self, lines):
 
24
        """Create a user-mapper from a list of lines.
 
25
 
 
26
        Blank lines and comment lines (starting with #) are ignored.
 
27
        Otherwise lines are of the form:
 
28
 
 
29
          old-id = new-id
 
30
 
 
31
        Each id may be in the following forms:
 
32
 
 
33
          name <email>
 
34
          name
 
35
 
 
36
        If old-id has the value '@', then new-id is the domain to use
 
37
        when generating an email from a user-id.
 
38
        """
 
39
        self._parse(lines)
 
40
 
 
41
    def _parse(self, lines):
 
42
        self._user_map = {}
 
43
        self._default_domain = None
 
44
        for line in lines:
 
45
            line = line.strip()
 
46
            if len(line) == 0 or line.startswith('#'):
 
47
                continue
 
48
            old, new = line.split('=', 1)
 
49
            old = old.strip()
 
50
            new = new.strip()
 
51
            if old == '@':
 
52
                self._default_domain = new
 
53
                continue
 
54
            # Parse each id into a name and email address
 
55
            old_name, old_email = self._parse_id(old)
 
56
            new_name, new_email = self._parse_id(new)
 
57
            #print "found user map: %s => %s" % ((old_name, old_email), (new_name, new_email))
 
58
            self._user_map[(old_name, old_email)] = (new_name, new_email)
 
59
 
 
60
    def _parse_id(self, id):
 
61
        if id.find('<') == -1:
 
62
            return id, ""
 
63
        else:
 
64
            return Utils.parseaddr(id)
 
65
 
 
66
    def map_name_and_email(self, name, email):
 
67
        """Map a name and an email to the preferred name and email.
 
68
 
 
69
        :param name: the current name
 
70
        :param email: the current email
 
71
        :result: the preferred name and email
 
72
        """
 
73
        try:
 
74
            new_name, new_email = self._user_map[(name, email)]
 
75
        except KeyError:
 
76
            new_name = name
 
77
            if self._default_domain and not email:
 
78
                new_email = "%s@%s" % (name, self._default_domain)
 
79
            else:
 
80
                new_email = email
 
81
        return new_name, new_email