Continue to optimize manage-projects for resiliency

Saving the state for having created the project was sticking to false.
If we had the git repo locally but it wasn't in gerrit, the logic was
all message up. Checking for homepage and downloads in github kills us -
although it would be fine if we'd started from caching homepage and
description in the first place, so maybe we need a script that sets
status quo in the cache file.

Change-Id: I15802082c0bef9e9362eb9482b058f81d1e566d7
diff --git a/jeepyb/cmd/manage_projects.py b/jeepyb/cmd/manage_projects.py
index a86ec98..6c43fe3 100644
--- a/jeepyb/cmd/manage_projects.py
+++ b/jeepyb/cmd/manage_projects.py
@@ -59,6 +59,7 @@
 import os
 import re
 import shlex
+import shutil
 import subprocess
 import tempfile
 import time
@@ -304,15 +305,11 @@
         needs_update = True
     if not cache.get('gerrit-in-team', False):
         needs_update = True
-    if description and cache.get('description') != description:
+    if cache.get('has_issues', default_has_issues) != has_issues:
         needs_update = True
-    if homepage and cache.get('homepage') != homepage:
+    if cache.get('has_downloads', default_has_downloads) != has_downloads:
         needs_update = True
-    if cache.get('has_issues') != has_issues:
-        needs_update = True
-    if cache.get('has_downloads') != has_downloads:
-        needs_update = True
-    if cache.get('has_wiki') != has_wiki:
+    if cache.get('has_wiki', default_has_wiki) != has_wiki:
         needs_update = True
     if not needs_update:
         return False
@@ -695,28 +692,26 @@
                 project_created = project_cache[project].get(
                     'project-created', False)
                 if not project_created:
-                    project_created = create_gerrit_project(
-                        project, project_list, gerrit)
-                    project_cache[project]['project-created'] = project_created
-                if not project_created:
-                    continue
+                    try:
+                        project_created = create_gerrit_project(
+                            project, project_list, gerrit)
+                        project_cache[project]['project-created'] = True
+                    except Exception:
+                        project_cache[project]['project-created'] = False
+                        continue
 
                 pushed_to_gerrit = project_cache[project].get(
                     'pushed-to-gerrit', False)
                 if not pushed_to_gerrit:
-                    if not os.path.exists(repo_path):
-                        # We don't have a local copy already, get one
+                    # We haven't pushed to gerrit, so grab the repo again
+                    if os.path.exists(repo_path):
+                        shutil.rmtree(repo_path)
 
-                        # Make Local repo
-                        push_string = make_local_copy(
-                            repo_path, project, project_list,
-                            git_opts, ssh_env, upstream, GERRIT_HOST,
-                            GERRIT_PORT, project_git, GERRIT_GITID)
-                    else:
-                        # We do have a local copy of it already, make sure
-                        # it's in shape to have work done.
-                        update_local_copy(
-                            repo_path, track_upstream, git_opts, ssh_env)
+                    # Make Local repo
+                    push_string = make_local_copy(
+                        repo_path, project, project_list,
+                        git_opts, ssh_env, upstream, GERRIT_HOST,
+                        GERRIT_PORT, project_git, GERRIT_GITID)
 
                     description = (
                         find_description_override(repo_path)
@@ -724,9 +719,10 @@
 
                     fsck_repo(repo_path)
 
-                    push_to_gerrit(
-                        repo_path, project, push_string,
-                        remote_url, ssh_env)
+                    if push_string:
+                        push_to_gerrit(
+                            repo_path, project, push_string,
+                            remote_url, ssh_env)
                     project_cache[project]['pushed-to-gerrit'] = True
                     if GERRIT_REPLICATE:
                         gerrit.replicate(project)