aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'g_octave/svn/client.py')
-rw-r--r--g_octave/svn/client.py39
1 files changed, 27 insertions, 12 deletions
diff --git a/g_octave/svn/client.py b/g_octave/svn/client.py
index 29f5e9a..31e689c 100644
--- a/g_octave/svn/client.py
+++ b/g_octave/svn/client.py
@@ -18,6 +18,9 @@ import subprocess
import sys
import urllib2
+import revisions
+
+from g_octave import config
class SvnClient:
@@ -25,13 +28,31 @@ class SvnClient:
categories = ['main', 'extra', 'language', 'nonfree']
exclude = ['CONTENTS', 'INDEX', 'Makefile', 'base']
- def __init__(self, verbose=False):
+ def __init__(self, create_revisions=True, verbose=False):
+ conf = config.Config()
+ json_file = os.path.join(conf.db, 'revisions.json')
self._verbose = verbose
self._client = pysvn.Client()
+ self._revisions = revisions.Revisions(json_file)
self.packages = {}
+ if create_revisions and not os.path.exists(json_file):
+ self.update_revisions()
+ else:
+ self.packages = self._revisions.get()
+
+ def update_revisions(self):
+ updated = []
for category in self.categories:
self.packages[category] = self._list_packages(category)
-
+ for category in self.packages:
+ for package in self.packages[category]:
+ old_revision = self._revisions.get(category, package)
+ current_revision = self.packages[category][package]
+ if current_revision is None or current_revision > old_revision:
+ self._revisions.set(category, package, current_revision)
+ updated.append((category, package))
+ return updated
+
def _list_packages(self, category):
try:
if self._verbose:
@@ -42,18 +63,18 @@ class SvnClient:
)
except pysvn.ClientError, err:
print >> sys.stderr, 'Error: ' + str(err)
- tmp_list = []
+ tmp = {}
for props, lock in pkg_list:
filename = props.repos_path.split('/')[-1]
if filename not in self.exclude and filename != category:
- tmp_list.append(filename)
- return tmp_list
+ tmp[filename] = props.created_rev.number
+ return tmp
def create_description_tree(self, dest, categories=['main', 'extra', 'language']):
for category in categories:
if category not in self.categories:
continue
- for pkg in self.packages[category]:
+ for pkg, revision in self.packages[category]:
current_dir = os.path.join(dest, category, pkg)
os.makedirs(current_dir)
try:
@@ -66,7 +87,6 @@ class SvnClient:
shutil.copyfileobj(fp, fp_)
except urllib2.URLError:
pass
-
def checkout_package(self, category, name, dest, stable=True):
if stable:
@@ -88,8 +108,3 @@ class SvnClient:
except pysvn.ClientError, err:
return False
return True
-
- def create_tarball(self, category, name):
- tmpdir = '/tmp/tmp-' + name
- self.checkout_package(category, name, tmpdir)
- shutil.copytree(tmpdir, '/tmp/'+name)