~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Martin Pool
  • Date: 2005-04-15 00:51:13 UTC
  • Revision ID: mbp@sourcefrog.net-20050415005113-68b2f3c98a4279c9
- Don't use host fqdn for default user name, because DNS tends
  to make it slow.
- take email from ~/.bzr.email if present

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
# along with this program; if not, write to the Free Software
17
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
18
 
19
 
import os, types, re, time
 
19
import os, types, re, time, errno
20
20
from stat import S_ISREG, S_ISDIR, S_ISLNK, ST_MODE, ST_SIZE
21
21
 
22
22
from errors import bailout, BzrError
129
129
            'sha1': s.hexdigest()}
130
130
 
131
131
 
132
 
def auto_user_id():
 
132
def _auto_user_id():
133
133
    """Calculate automatic user identification.
134
134
 
135
135
    Returns (realname, email).
136
136
 
137
 
    Only used when none is set in the environment.
 
137
    Only used when none is set in the environment or the id file.
138
138
 
 
139
    This previously used the FQDN as the default domain, but that can
 
140
    be very slow on machines where DNS is broken.  So now we simply
 
141
    use the hostname.
139
142
    """
140
143
    import socket
141
144
 
142
145
    # XXX: Any good way to get real user name on win32?
143
146
 
144
 
    # XXX: can the FQDN be non-ascii?
145
 
 
146
147
    try:
147
148
        import pwd
148
149
        uid = os.getuid()
155
156
        else:
156
157
            realname = gecos[:comma]
157
158
 
158
 
        return realname, (username + '@' + socket.getfqdn())
159
 
 
160
159
    except ImportError:
 
160
        realname = ''
161
161
        import getpass
162
 
        getpass.getuser().decode(bzrlib.user_encoding)
163
 
        return '', (username + '@' + socket.getfqdn())
164
 
 
 
162
        username = getpass.getuser().decode(bzrlib.user_encoding)
 
163
 
 
164
    return realname, (username + '@' + os.gethostname())
 
165
 
 
166
 
 
167
def _get_user_id():
 
168
    v = os.environ.get('BZREMAIL')
 
169
    if v:
 
170
        return v.decode(bzrlib.user_encoding)
 
171
    
 
172
    try:
 
173
        return (open(os.path.expanduser("~/.bzr.email"))
 
174
                .read()
 
175
                .decode(bzrlib.user_encoding)
 
176
                .rstrip("\r\n"))
 
177
    except OSError, e:
 
178
        if e.errno != ENOENT:
 
179
            raise e
 
180
 
 
181
    v = os.environ.get('EMAIL')
 
182
    if v:
 
183
        return v.decode(bzrlib.user_encoding)
 
184
    else:    
 
185
        return None
165
186
 
166
187
 
167
188
def username():
174
195
    :todo: Allow taking it from a dotfile to help people on windows
175
196
           who can't easily set variables.
176
197
    """
177
 
    e = os.environ.get('BZREMAIL') or os.environ.get('EMAIL')
178
 
    if e:
179
 
        return e.decode(bzrlib.user_encoding)
180
 
 
181
 
    name, email = auto_user_id()
 
198
    v = _get_user_id()
 
199
    if v:
 
200
        return v
 
201
    
 
202
    name, email = _auto_user_id()
182
203
    if name:
183
204
        return '%s <%s>' % (name, email)
184
205
    else:
188
209
_EMAIL_RE = re.compile(r'[\w+.-]+@[\w+.-]+')
189
210
def user_email():
190
211
    """Return just the email component of a username."""
191
 
    e = os.environ.get('BZREMAIL') or os.environ.get('EMAIL')
 
212
    e = _get_user_id()
192
213
    if e:
193
 
        e = e.decode(bzrlib.user_encoding)
194
 
        
195
214
        m = _EMAIL_RE.search(e)
196
215
        if not m:
197
 
            bailout('%r is not a reasonable email address' % e)
 
216
            bailout("%r doesn't seem to contain a reasonable email address" % e)
198
217
        return m.group(0)
199
218
 
200
 
    return auto_user_id()[1]
 
219
    return _auto_user_id()[1]
201
220
    
202
221
 
203
222