You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/06/03 17:31:59 UTC

[06/31] git commit: [#6235] ticket:352 tags/branches/trunk aware snapshot names

[#6235] ticket:352 tags/branches/trunk aware snapshot names


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/8e25e0c0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/8e25e0c0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/8e25e0c0

Branch: refs/heads/cj/merge-request-4
Commit: 8e25e0c03b895e39ca123441ebcdf1a0ec3df9e5
Parents: 77ae4f6
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri May 17 12:09:26 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Fri May 31 22:14:05 2013 +0000

----------------------------------------------------------------------
 Allura/allura/model/repository.py                |   17 +++++---
 ForgeSVN/forgesvn/model/svn.py                   |   40 +++++++++++++----
 ForgeSVN/forgesvn/tests/model/test_repository.py |   29 +++++++-----
 3 files changed, 58 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/8e25e0c0/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index 37b95ab..b728987 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -132,7 +132,7 @@ class RepositoryImplementation(object):
         '''Return count of the commits related to path'''
         raise NotImplementedError, 'commits_count'
 
-    def tarball(self, revision):
+    def tarball(self, revision, path=None):
         '''Create a tarball for the revision'''
         raise NotImplementedError, 'tarball'
 
@@ -266,10 +266,13 @@ class Repository(Artifact, ActivityObject):
                             self.project.shortname,
                             self.name)
 
-    def tarball_filename(self, revision):
+    def tarball_filename(self, revision, path=None):
         shortname = c.project.shortname.replace('/', '-')
         mount_point = c.app.config.options.mount_point
         filename = '%s-%s-%s' % (shortname, mount_point, revision)
+        if path:
+            path = path.strip('/')
+            filename += '-' + '-'.join(path.split('/'))
         return filename
 
     def tarball_url(self, revision):
@@ -282,8 +285,8 @@ class Repository(Artifact, ActivityObject):
                          filename)
         return urljoin(tg.config.get('scm.repos.tarball.url_prefix', '/'), r)
 
-    def get_tarball_status(self, revision):
-        pathname = os.path.join(self.tarball_path, self.tarball_filename(revision))
+    def get_tarball_status(self, revision, path=None):
+        pathname = os.path.join(self.tarball_path, self.tarball_filename(revision, path))
         filename = '%s%s' % (pathname, '.zip')
         tmpfilename = '%s%s' % (pathname, '.tmp')
 
@@ -551,8 +554,10 @@ class Repository(Artifact, ActivityObject):
     def forks(self):
         return self.query.find({'upstream_repo.name': self.url()}).all()
 
-    def tarball(self, revision):
-        self._impl.tarball(revision)
+    def tarball(self, revision, path=None):
+        if path:
+            path = path.strip('/')
+        self._impl.tarball(revision, path)
 
 class MergeRequest(VersionedArtifact, ActivityObject):
     statuses=['open', 'merged', 'rejected']

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/8e25e0c0/ForgeSVN/forgesvn/model/svn.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index 2189a7f..b649dae 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -636,23 +636,45 @@ class SVNImplementation(M.RepositoryImplementation):
                 entries[path] = self._oid(info.last_changed_rev.number)
         return entries
 
-    def tarball(self, commit):
+    def _path_to_root(self, path):
+        '''Return tag/branch/trunk root for given path inside svn repo'''
+        if path:
+            path = path.strip('/').split('/')
+            idx = None
+            if 'tags' in path:
+                idx = path.index('tags')
+            elif 'branches' in path:
+                idx = path.index('branches')
+            if idx is not None and idx < len(path) - 1:  # e.g. path/tags/tag-1.0/...
+                return '/'.join(path[:idx + 2])  # path/tags/tag-1.0
+            if 'trunk' in path:
+                idx = path.index('trunk')
+                return '/'.join(path[:idx + 1])  # path/trunk
+        # no tag/brach/trunk in path
+        trunk_exists = svn_path_exists(
+            'file://%s%s/%s' % (self._repo.fs_path, self._repo.name, 'trunk'))
+        if trunk_exists:
+            return 'trunk'
+        return ''
+
+    def tarball(self, commit, path=None):
+        path = self._path_to_root(path)
         if not os.path.exists(self._repo.tarball_path):
             os.makedirs(self._repo.tarball_path)
-        archive_name = self._repo.tarball_filename(commit)
-        path = os.path.join(self._repo.tarball_path, archive_name)
+        archive_name = self._repo.tarball_filename(commit, path)
+        dest = os.path.join(self._repo.tarball_path, archive_name)
         filename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.zip'))
         tmpfilename = os.path.join(self._repo.tarball_path, '%s%s' % (archive_name, '.tmp'))
-        if os.path.exists(path):
-            rmtree(path)
+        rmtree(dest, ignore_errors=True)
+        path = os.path.join(self._url, '')#path)
         try:
-            self._svn.export(self._url,
-                             path,
+            self._svn.export(path,
+                             dest,
                              revision=pysvn.Revision(pysvn.opt_revision_kind.number, commit))
-            zipdir(path, tmpfilename)
+            zipdir(dest, tmpfilename)
             os.rename(tmpfilename, filename)
         finally:
-            rmtree(path)
+            rmtree(dest, ignore_errors=True)
             if os.path.exists(tmpfilename):
                 os.remove(tmpfilename)
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/8e25e0c0/ForgeSVN/forgesvn/tests/model/test_repository.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/tests/model/test_repository.py b/ForgeSVN/forgesvn/tests/model/test_repository.py
index c528004..9a22ae1 100644
--- a/ForgeSVN/forgesvn/tests/model/test_repository.py
+++ b/ForgeSVN/forgesvn/tests/model/test_repository.py
@@ -314,60 +314,63 @@ class TestSVNRepo(unittest.TestCase, RepoImplTestBase):
     @onlyif(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing')
     def test_tarball_aware_of_tags(self):
         # TODO: check zip that it actually contains only needed files
-        tarball_path = '/tmp/tarball/svn/t/te/test/svn-tags/'
+        h.set_context('test', 'svn-tags', neighborhood='Projects')
+        tarball_path = '/tmp/tarball/svn/t/te/test/testsvn-trunk-tags-branches/'
         fn = tarball_path + 'test-svn-tags-1-tags-tag-1.0.zip'
         self.svn_tags.tarball('1', '/tags/tag-1.0/')
-        assert os.path.isfile(fn)
+        assert os.path.isfile(fn), fn
         os.remove(fn)
         self.svn_tags.tarball('1', '/tags/tag-1.0/some/path/')
-        assert os.path.isfile(fn)
+        assert os.path.isfile(fn), fn
         os.remove(fn)
         # if inside of tags, but no tag is specified
         # expect snapshot of trunk
         fn = tarball_path + 'test-svn-tags-1-trunk.zip'
         self.svn_tags.tarball('1', '/tags/')
-        assert os.path.isfile(fn)
+        assert os.path.isfile(fn), fn
         os.remove(fn)
 
     @onlyif(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing')
     def test_tarball_aware_of_branches(self):
         # TODO: check zip that it actually contains only needed files
-        tarball_path = '/tmp/tarball/svn/t/te/test/svn-tags/'
+        h.set_context('test', 'svn-tags', neighborhood='Projects')
+        tarball_path = '/tmp/tarball/svn/t/te/test/testsvn-trunk-tags-branches/'
         fn = tarball_path + 'test-svn-tags-1-branches-aaa.zip'
         self.svn_tags.tarball('1', '/branches/aaa/')
-        assert os.path.isfile(fn)
+        assert os.path.isfile(fn), fn
         os.remove(fn)
         self.svn_tags.tarball('1', '/branches/aaa/some/path/')
-        assert os.path.isfile(fn)
+        assert os.path.isfile(fn), fn
         os.remove(fn)
         # if inside of branches, but no branch is specified
         # expect snapshot of trunk
         fn = tarball_path + 'test-svn-tags-1-trunk.zip'
         self.svn_tags.tarball('1', '/branches/')
-        assert os.path.isfile(fn)
+        assert os.path.isfile(fn), fn
         os.remove(fn)
 
     @onlyif(os.path.exists(tg.config.get('scm.repos.tarball.zip_binary', '/usr/bin/zip')), 'zip binary is missing')
     def test_tarball_aware_of_trunk(self):
         # TODO: check zip that it actually contains only needed files
-        tarball_path = '/tmp/tarball/svn/t/te/test/svn-tags/'
+        h.set_context('test', 'svn-tags', neighborhood='Projects')
+        tarball_path = '/tmp/tarball/svn/t/te/test/testsvn-trunk-tags-branches/'
         fn = tarball_path + 'test-svn-tags-1-trunk.zip'
         self.svn_tags.tarball('1', '/trunk/')
-        assert os.path.isfile(fn)
+        assert os.path.isfile(fn), fn
         os.remove(fn)
         self.svn_tags.tarball('1', '/trunk/some/path/')
-        assert os.path.isfile(fn)
+        assert os.path.isfile(fn), fn
         os.remove(fn)
         # no path, but there are trunk in the repo
         # expect snapshot of trunk
         self.svn_tags.tarball('1')
-        assert os.path.isfile(fn)
+        assert os.path.isfile(fn), fn
         os.remove(fn)
         # no path, and no trunk dir
         # expect snapshot of repo root
         fn = '/tmp/tarball/svn/t/te/test/testsvn/test-src-1.zip'
         self.repo.tarball('1')
-        assert os.path.isfile(fn)
+        assert os.path.isfile(fn), fn
         os.remove(fn)
 
     def test_is_empty(self):