~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: mbp at sourcefrog
  • Date: 2005-04-13 04:43:23 UTC
  • Revision ID: mbp@sourcefrog.net-20050413044323-e6c19d07ed0898fc
- unicode decoding in getting email and userid strings

Show diffs side-by-side

added added

removed removed

Lines of Context:
128
128
            'sha1': s.hexdigest()}
129
129
 
130
130
 
131
 
 
132
 
def username():
133
 
    """Return email-style username.
134
 
 
135
 
    Something similar to 'Martin Pool <mbp@sourcefrog.net>'
136
 
 
137
 
    :todo: Check it's reasonably well-formed.
138
 
 
139
 
    :todo: Allow taking it from a dotfile to help people on windows
140
 
           who can't easily set variables.
141
 
 
142
 
    :todo: Cope without pwd module, which is only on unix. 
 
131
def auto_user_id():
 
132
    """Calculate automatic user identification.
 
133
 
 
134
    Returns (realname, email).
 
135
 
 
136
    Only used when none is set in the environment.
 
137
 
143
138
    """
144
 
    e = os.environ.get('BZREMAIL') or os.environ.get('EMAIL')
145
 
    if e: return e
146
 
 
147
 
    import socket
 
139
    import socket, locale
 
140
 
 
141
    # XXX: Any good way to get real user name on win32?
 
142
 
 
143
    # XXX: can the FQDN be non-ascii?
 
144
 
 
145
    enc = locale.getpreferredencoding()
148
146
    
149
147
    try:
150
148
        import pwd
151
149
        uid = os.getuid()
152
150
        w = pwd.getpwuid(uid)
153
 
        gecos = w.pw_gecos
 
151
        gecos = w.pw_gecos.decode(enc)
 
152
        username = w.pw_name.decode(enc)
154
153
        comma = gecos.find(',')
155
154
        if comma == -1:
156
155
            realname = gecos
157
156
        else:
158
157
            realname = gecos[:comma]
159
 
        return '%s <%s@%s>' % (realname, w.pw_name, socket.getfqdn())
 
158
 
 
159
        return realname, (username + '@' + socket.getfqdn())
 
160
 
160
161
    except ImportError:
161
 
        pass
162
 
 
163
 
    import getpass, socket
164
 
    return '<%s@%s>' % (getpass.getuser(), socket.getfqdn())
 
162
        import getpass
 
163
        return '', (getpass.getuser().decode(enc) + '@' + socket.getfqdn())
 
164
 
 
165
 
 
166
 
 
167
def username():
 
168
    """Return email-style username.
 
169
 
 
170
    Something similar to 'Martin Pool <mbp@sourcefrog.net>'
 
171
 
 
172
    :todo: Check it's reasonably well-formed.
 
173
 
 
174
    :todo: Allow taking it from a dotfile to help people on windows
 
175
           who can't easily set variables.
 
176
    """
 
177
    import locale
 
178
    e = os.environ.get('BZREMAIL') or os.environ.get('EMAIL')
 
179
    if e:
 
180
        return e.decode(locale.getpreferredencoding())
 
181
 
 
182
    name, email = auto_user_id()
 
183
    if name:
 
184
        return '%s <%s>' % (name, email)
 
185
    else:
 
186
        return email
165
187
 
166
188
 
167
189
_EMAIL_RE = re.compile(r'[\w+.-]+@[\w+.-]+')
168
190
def user_email():
169
191
    """Return just the email component of a username."""
170
192
    e = os.environ.get('BZREMAIL') or os.environ.get('EMAIL')
 
193
    import locale
 
194
    e = e.decode(locale.getpreferredencoding())
171
195
    if e:
172
196
        m = _EMAIL_RE.search(e)
173
197
        if not m:
174
198
            bailout('%r is not a reasonable email address' % e)
175
199
        return m.group(0)
176
200
 
177
 
 
178
 
    import getpass, socket
179
 
    return '%s@%s' % (getpass.getuser(), socket.getfqdn())
180
 
 
 
201
    return auto_user_id()[1]
181
202
    
182
203
 
183
204