Browse Source

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 <sop@google.com>
Shawn O. Pearce 16 years ago
parent
commit
37dbf2bf0f
1 changed files with 19 additions and 6 deletions
  1. 19 6
      subcmds/init.py

+ 19 - 6
subcmds/init.py

@@ -148,20 +148,33 @@ to update the working directory files.
       print >>sys.stderr, 'fatal: %s' % str(e)
       print >>sys.stderr, 'fatal: %s' % str(e)
       sys.exit(1)
       sys.exit(1)
 
 
-  def _PromptKey(self, prompt, key, value):
+  def _Prompt(self, prompt, value):
     mp = self.manifest.manifestProject
     mp = self.manifest.manifestProject
 
 
     sys.stdout.write('%-10s [%s]: ' % (prompt, value))
     sys.stdout.write('%-10s [%s]: ' % (prompt, value))
     a = sys.stdin.readline().strip()
     a = sys.stdin.readline().strip()
-    if a != '' and a != value:
-      mp.config.SetString(key, a)
+    if a == '':
+      return value
+    return a
 
 
   def _ConfigureUser(self):
   def _ConfigureUser(self):
     mp = self.manifest.manifestProject
     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):
   def _HasColorSet(self, gc):
     for n in ['ui', 'diff', 'status']:
     for n in ['ui', 'diff', 'status']: