sync: Run `git gc --auto` after fetch

Users may wind up with a lot of loose object content in projects they
don't frequently make changes in, but that are modified by others.

Since we bypass many git code paths that would have otherwise called
out to `git gc --auto`, its possible for these projects to have
their loose object database grow out of control.  To help prevent
that, we now invoke it ourselves during the network half of sync.

Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/subcmds/selfupdate.py b/subcmds/selfupdate.py
index 4f46a12..46aa3a1 100644
--- a/subcmds/selfupdate.py
+++ b/subcmds/selfupdate.py
@@ -55,6 +55,7 @@
         print >>sys.stderr, "error: can't update repo"
         sys.exit(1)
 
+      rp.bare_git.gc('--auto')
       _PostRepoFetch(rp,
                      no_repo_verify = opt.no_repo_verify,
                      verbose = True)
diff --git a/subcmds/sync.py b/subcmds/sync.py
index afd44da..1537c9a 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -118,6 +118,8 @@
         print >>sys.stderr, 'error: Cannot fetch %s' % project.name
         sys.exit(1)
     pm.end()
+    for project in projects:
+      project.bare_git.gc('--auto')
     return fetched
 
   def UpdateProjectList(self):