Mercurial > hg
changeset 3677:1a0fa3914c46
Avoid looking up usernames if the current user owns the .hgrc file
Converting uids into usernames may be somewhat expensive when NIS
or LDAP is involved.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Sat, 18 Nov 2006 23:51:14 -0200 |
parents | d94664748bc1 |
children | 7e622c9a9707 |
files | mercurial/ui.py mercurial/util.py tests/test-trusted.py |
diffstat | 3 files changed, 22 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/ui.py Sat Nov 18 23:51:13 2006 -0200 +++ b/mercurial/ui.py Sat Nov 18 23:51:14 2006 -0200 @@ -96,10 +96,12 @@ def _is_trusted(self, fp, f, warn=True): if not self.check_trusted: return True + st = util.fstat(fp) + if util.isowner(fp, st): + return True tusers = self.trusted_users tgroups = self.trusted_groups if (tusers or tgroups) and '*' not in tusers and '*' not in tgroups: - st = util.fstat(fp) user = util.username(st.st_uid) group = util.groupname(st.st_gid) if user not in tusers and group not in tgroups:
--- a/mercurial/util.py Sat Nov 18 23:51:13 2006 -0200 +++ b/mercurial/util.py Sat Nov 18 23:51:14 2006 -0200 @@ -654,6 +654,11 @@ def explain_exit(code): return _("exited with status %d") % code, code + # if you change this stub into a real check, please try to implement the + # username and groupname functions above, too. + def isowner(fp, st=None): + return True + try: # override functions with win32 versions if possible from util_win32 import * @@ -765,6 +770,16 @@ return _("stopped by signal %d") % val, val raise ValueError(_("invalid exit code")) + def isowner(fp, st=None): + """Return True if the file object f belongs to the current user. + + The return value of a util.fstat(f) may be passed as the st argument. + """ + if st is None: + st = fstat(f) + return st.st_uid == os.getuid() + + def opener(base, audit=True): """ return a function that opens files relative to base
--- a/tests/test-trusted.py Sat Nov 18 23:51:13 2006 -0200 +++ b/tests/test-trusted.py Sat Nov 18 23:51:14 2006 -0200 @@ -41,6 +41,10 @@ return group util.groupname = groupname + def isowner(fp, st=None): + return user == cuser + util.isowner = isowner + # try to read everything #print '# File belongs to user %s, group %s' % (user, group) #print '# trusted users = %s; trusted groups = %s' % (tusers, tgroups)