Merge "Fix: local manifest deprecation warning appears more than once"
diff --git a/color.py b/color.py
index d856313..7970198 100644
--- a/color.py
+++ b/color.py
@@ -126,6 +126,13 @@
       s._out.write(c(fmt, *args))
     return f
 
+  def nofmt_printer(self, opt=None, fg=None, bg=None, attr=None):
+    s = self
+    c = self.nofmt_colorer(opt, fg, bg, attr)
+    def f(fmt):
+      s._out.write(c(fmt))
+    return f
+
   def colorer(self, opt=None, fg=None, bg=None, attr=None):
     if self._on:
       c = self._parse(opt, fg, bg, attr)
@@ -138,6 +145,17 @@
         return fmt % args
       return f
 
+  def nofmt_colorer(self, opt=None, fg=None, bg=None, attr=None):
+    if self._on:
+      c = self._parse(opt, fg, bg, attr)
+      def f(fmt):
+        return ''.join([c, fmt, RESET])
+      return f
+    else:
+      def f(fmt):
+        return fmt
+      return f
+
   def _parse(self, opt, fg, bg, attr):
     if not opt:
       return _Color(fg, bg, attr)
diff --git a/project.py b/project.py
index ba7898e..22e4a5d 100644
--- a/project.py
+++ b/project.py
@@ -946,6 +946,11 @@
                                   dest_branch)
     if auto_topic:
       ref_spec = ref_spec + '/' + branch.name
+    if not url.startswith('ssh://'):
+      rp = ['r=%s' % p for p in people[0]] + \
+           ['cc=%s' % p for p in people[1]]
+      if rp:
+        ref_spec = ref_spec + '%' + ','.join(rp)
     cmd.append(ref_spec)
 
     if GitCommand(self, cmd, bare = True).Wait() != 0:
@@ -963,7 +968,8 @@
       quiet=False,
       is_new=None,
       current_branch_only=False,
-      clone_bundle=True):
+      clone_bundle=True,
+      no_tags=False):
     """Perform only the network IO portion of the sync process.
        Local working directory/branch state is not affected.
     """
@@ -1001,7 +1007,8 @@
         current_branch_only = True
 
     if not self._RemoteFetch(initial=is_new, quiet=quiet, alt_dir=alt_dir,
-                             current_branch_only=current_branch_only):
+                             current_branch_only=current_branch_only,
+                             no_tags=no_tags):
       return False
 
     if self.worktree:
@@ -1551,7 +1558,8 @@
                    current_branch_only=False,
                    initial=False,
                    quiet=False,
-                   alt_dir=None):
+                   alt_dir=None,
+                   no_tags=False):
 
     is_sha1 = False
     tag_name = None
@@ -1644,7 +1652,10 @@
 
     if not current_branch_only:
       # Fetch whole repo
-      cmd.append('--tags')
+      if no_tags:
+        cmd.append('--no-tags')
+      else:
+        cmd.append('--tags')
       cmd.append((u'+refs/heads/*:') + remote.ToLocal('refs/heads/*'))
     elif tag_name is not None:
       cmd.append('tag')
diff --git a/subcmds/info.py b/subcmds/info.py
index a6eba88..8fb363f 100644
--- a/subcmds/info.py
+++ b/subcmds/info.py
@@ -48,7 +48,7 @@
     self.headtext = self.out.printer('headtext', fg = 'yellow')
     self.redtext = self.out.printer('redtext', fg = 'red')
     self.sha = self.out.printer("sha", fg = 'yellow')
-    self.text = self.out.printer('text')
+    self.text = self.out.nofmt_printer('text')
     self.dimtext = self.out.printer('dimtext', attr = 'dim')
 
     self.opt = opt
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 228a279..5c369a7 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -189,6 +189,9 @@
     p.add_option('--fetch-submodules',
                  dest='fetch_submodules', action='store_true',
                  help='fetch submodules from server')
+    p.add_option('--no-tags',
+                 dest='no_tags', action='store_true',
+                 help="don't fetch tags")
     if show_smart:
       p.add_option('-s', '--smart-sync',
                    dest='smart_sync', action='store_true',
@@ -235,7 +238,8 @@
         success = project.Sync_NetworkHalf(
           quiet=opt.quiet,
           current_branch_only=opt.current_branch_only,
-          clone_bundle=not opt.no_clone_bundle)
+          clone_bundle=not opt.no_clone_bundle,
+          no_tags=opt.no_tags)
         self._fetch_times.Set(project, time.time() - start)
 
         # Lock around all the rest of the code, since printing, updating a set
@@ -273,7 +277,8 @@
         if project.Sync_NetworkHalf(
             quiet=opt.quiet,
             current_branch_only=opt.current_branch_only,
-            clone_bundle=not opt.no_clone_bundle):
+            clone_bundle=not opt.no_clone_bundle,
+            no_tags=opt.no_tags):
           fetched.add(project.gitdir)
         else:
           print('error: Cannot fetch %s' % project.name, file=sys.stderr)
@@ -558,7 +563,8 @@
 
     if not opt.local_only:
       mp.Sync_NetworkHalf(quiet=opt.quiet,
-                          current_branch_only=opt.current_branch_only)
+                          current_branch_only=opt.current_branch_only,
+                          no_tags=opt.no_tags)
 
     if mp.HasChanges:
       syncbuf = SyncBuffer(mp.config)