From 37dbf2bf0fa799530052ffd010dadbd4c01b7746 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 2 Jul 2009 10:53:04 -0700 Subject: [PATCH] Try to prevent 'repo sync' as a user name When someone copies and pastes a setup line from a web page, they might actually copy 'repo sync' onto the clipboard and wind up pasting it into the "Your Name" prompt. This means they will initialize their client with the user name of "repo sync", creating some rather funny looking commits later on. For example: To setup your source tree: mkdir ~/code cd ~/code repo init -u git://.... repo sync If this entire block was just blindly copy and pasted into the terminal, the shell won't read "repo sync" but "repo init" will. By showing the user their full identity string, and asking them to confirm it before we continue, we can give the hapless user a chance to recover from this mistake, without unfairly harming those who were actually named 'repo' by their parents. Signed-off-by: Shawn O. Pearce --- subcmds/init.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/subcmds/init.py b/subcmds/init.py index fbc406e2..75a58f11 100644 --- a/subcmds/init.py +++ b/subcmds/init.py @@ -148,20 +148,33 @@ to update the working directory files. print >>sys.stderr, 'fatal: %s' % str(e) sys.exit(1) - def _PromptKey(self, prompt, key, value): + def _Prompt(self, prompt, value): mp = self.manifest.manifestProject sys.stdout.write('%-10s [%s]: ' % (prompt, value)) a = sys.stdin.readline().strip() - if a != '' and a != value: - mp.config.SetString(key, a) + if a == '': + return value + return a def _ConfigureUser(self): mp = self.manifest.manifestProject - print '' - self._PromptKey('Your Name', 'user.name', mp.UserName) - self._PromptKey('Your Email', 'user.email', mp.UserEmail) + while True: + print '' + name = self._Prompt('Your Name', mp.UserName) + email = self._Prompt('Your Email', mp.UserEmail) + + print '' + print 'Your identity is: %s <%s>' % (name, email) + sys.stdout.write('is this correct [yes/no]? ') + if 'yes' == sys.stdin.readline().strip(): + break + + if name != mp.UserName: + mp.config.SetString('user.name', name) + if email != mp.UserEmail: + mp.config.SetString('user.email', email) def _HasColorSet(self, gc): for n in ['ui', 'diff', 'status']: