Switch to side-by-side view

--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -27,38 +27,38 @@
 class RepositoryImplementation(object):
 
     # Repository-specific code
-    def init(self):
+    def init(self): # pragma no cover
         raise NotImplementedError, 'init'
 
-    def clone_from(self, source_path):
+    def clone_from(self, source_path): # pragma no cover
         raise NotImplementedError, 'clone_from'
 
-    def commit(self, revision):
+    def commit(self, revision): # pragma no cover
         raise NotImplementedError, 'commit'
 
-    def new_commits(self, all_commits=False):
+    def new_commits(self, all_commits=False): # pragma no cover
         '''Return any commit object_ids in the native repo that are not (yet) stored
         in the database in topological order (parents first)'''
         raise NotImplementedError, 'commit'
 
-    def commit_context(self, object_id):
+    def commit_context(self, object_id): # pragma no cover
         '''Returns {'prev':Commit, 'next':Commit}'''
         raise NotImplementedError, 'context'
 
-    def refresh_heads(self):
+    def refresh_heads(self): # pragma no cover
         '''Sets repository metadata such as heads, tags, and branches'''
         raise NotImplementedError, 'refresh_heads'
 
-    def refresh_commit(self, ci, seen_object_ids):
+    def refresh_commit(self, ci, seen_object_ids): # pragma no cover
         '''Refresh the data in the commit object 'ci' with data from the repo'''
-        raise NotImplementedError, 'refresh_heads'
-
-    def _setup_receive_hook(self):
+        raise NotImplementedError, 'refresh_commit'
+
+    def _setup_receive_hook(self): # pragma no cover
         '''Install a hook in the repository that will ping the refresh url for
         the repo'''
         raise NotImplementedError, '_setup_receive_hook'
 
-    def log(self, object_id, skip, count):
+    def log(self, object_id, skip, count): # pragma no cover
         '''Return a list of object_ids beginning at the given commit ID and continuing
         to the parent nodes in a breadth-first traversal.  Also return a list of 'next commit' options
         (these are candidates for he next commit after 'count' commits have been
@@ -69,7 +69,7 @@
         '''Used in hg and svn to compute a git-like-tree lazily'''
         raise NotImplementedError, 'compute_tree'
 
-    def open_blob(self, blob):
+    def open_blob(self, blob): # pragma no cover
         '''Return a file-like object that contains the contents of the blob'''
         raise NotImplementedError, 'open_blob'
 
@@ -125,7 +125,7 @@
                 kw['url_path'] = pylons.c.project.url()
         super(Repository, self).__init__(**kw)
 
-    def __repr__(self):
+    def __repr__(self): # pragma no cover
         return '<%s %s>' % (
             self.__class__.__name__,
             self.full_fs_path)
@@ -165,7 +165,7 @@
             ci = self.commit(branch)
             if ci is None: return 0
             return ci.count_revisions()
-        except:
+        except: # pragma no cover
             log.exception('Error getting repo count')
             return 0
 
@@ -173,7 +173,7 @@
         if self._impl is None: return None
         try:
             return self.commit(branch)
-        except:
+        except: # pragma no cover
             return None
 
     def url(self):
@@ -193,12 +193,12 @@
     def full_fs_path(self):
         return os.path.join(self.fs_path, self.name)
 
-    def scm_host(self):
-        return self.tool + config.get('scm.host', '.' + pylons.request.host)
-
     @property
     def scm_url_path(self):
         return self.scm_host() + self.url_path + self.name
+
+    def scm_host(self):
+        return self.tool + config.get('scm.host', '.' + pylons.request.host)
 
     def merge_requests_by_statuses(self, *statuses):
         return MergeRequest.query.find(dict(
@@ -238,7 +238,7 @@
         i=0
         seen_object_ids = set()
         for i, oid in enumerate(commit_ids):
-            if len(seen_object_ids) > 10000:
+            if len(seen_object_ids) > 10000: # pragma no cover
                 log.info('... flushing seen object cache')
                 seen_object_ids = set()
             ci, isnew = Commit.upsert(oid)
@@ -384,7 +384,7 @@
                 r = cls(request_number=num, **kw)
                 session(r).flush(r)
                 return r
-            except pymongo.errors.DuplicateKeyError:
+            except pymongo.errors.DuplicateKeyError: # pragma no cover
                 session(r).expunge(r)
                 num += 1
 
@@ -419,7 +419,7 @@
             r = cls(repo_id=repo_id, object_id=object_id)
             session(r).flush(r)
             isnew = True
-        except pymongo.errors.DuplicateKeyError:
+        except pymongo.errors.DuplicateKeyError: # pragma no cover
             session(r).expunge(r)
             r = cls.query.get(repo_id=repo_id, object_id=object_id)
         return r, isnew
@@ -455,7 +455,7 @@
                 object_id=object_id)
             session(r).flush(r)
             isnew = True
-        except pymongo.errors.DuplicateKeyError:
+        except pymongo.errors.DuplicateKeyError: # pragma no cover
             session(r).expunge(r)
             r = cls.query.get(object_id=object_id)
         return r, isnew
@@ -500,7 +500,7 @@
     def index_id(self):
         return repr(self)
 
-    def set_context(self, context):
+    def set_context(self, context): # pragma no cover
         '''Set ephemeral (unsaved) attributes based on a context object'''
         raise NotImplementedError, 'set_context'
 
@@ -581,7 +581,7 @@
         if self.tree_id is None:
             self.tree_id = self.repo.compute_tree(self)
         t = Tree.query.get(object_id=self.tree_id)
-        t.set_context(self)
+        if t is not None: t.set_context(self)
         return t
 
     @LazyProperty
@@ -601,11 +601,6 @@
 
     def url(self):
         return self.repo.url_for_commit(self)
-
-    def dump_ref(self):
-        return CommitReference(
-            commit_class=self.__class__,
-            object_id=self.object_id)
 
     def log(self, skip, count):
         oids = list(self.log_iter(skip, count))
@@ -663,11 +658,6 @@
                     obj.set_last_commit(self, self.repo)
                 elif diff.is_delete:
                     self.diffs.removed.append(diff.a_path)
-                elif diff.is_copy:
-                    self.diffs.copied.append(dict(
-                            old=diff.a_path, new=diff.b_path))
-                    obj = RepoObject.query.get(object_id=diff.b_object_id)
-                    obj.set_last_commit(self, self.repo)
                 else:
                     self.diffs.changed.append(diff.a_path)
                     obj = RepoObject.query.get(object_id=diff.b_object_id)
@@ -948,22 +938,11 @@
         differ = SequenceMatcher(v0, v1)
         return differ.get_opcodes()
 
-class CommitReference(object):
-    def __init__(self, commit_class, commit_id):
-        self.commit_class = commit_class
-        self.commit_id = commit_id
-
-    @property
-    def artifact(self):
-        return self.commit_class.query.get(
-            commit_id=self.commit_id)
-
 class DiffObject(object):
     a_path = b_path = None
     a_object_id = b_object_id = None
     is_new = False
     is_delete = False
-    is_copy = False
 
     def __init__(self, a, b):
         if a:
@@ -982,9 +961,6 @@
             return '<new %s>' % self.b_path
         elif self.is_delete:
             return '<remove %s>' % self.a_path
-        elif self.is_copy:
-            return '<copy %s to %s>' % (
-                self.a_path, self.b_path)
         else:
             return '<change %s>' % (self.a_path)