1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-09-11 15:13:27 +02:00

Add Tags and RM support for srclib, don't copy dir

This commit is contained in:
Daniel Martí 2013-05-24 23:35:56 +02:00
parent c2196b2328
commit 79ec50719d
3 changed files with 66 additions and 41 deletions

View File

@ -657,11 +657,17 @@ def main():
build_succeeded = []
for app in apps:
build_dir = 'build/' + app['id']
if app['Repo Type'] == 'srclib':
build_dir = os.path.join('build', 'srclib')
else:
build_dir = os.path.join('build', app['id'])
# Set up vcs interface and make sure we have the latest code...
vcs = common.getvcs(app['Repo Type'], app['Repo'], build_dir, sdk_path)
if app['Repo Type'] == 'srclib':
build_dir = os.path.join(build_dir, app['Repo'])
if options.wiki:
import mwclient
site = mwclient.Site(wiki_server, path=wiki_path)

View File

@ -19,7 +19,6 @@
import sys
import os
import shutil
import re
import urllib2
import time
@ -43,24 +42,29 @@ def check_tags(app, sdk_path):
try:
build_dir = 'build/' + app['id']
if app['Repo Type'] == 'srclib':
build_dir = os.path.join('build', 'srclib')
repotype = common.getsrclibvcs(app['Repo'])
else:
build_dir = os.path.join('build/', app['id'])
repotype = app['Repo Type']
if app['Repo Type'] not in ('git', 'git-svn'):
if repotype not in ('git', 'git-svn'):
return (None, 'Tags update mode only works for git and git-svn repositories currently')
# Set up vcs interface and make sure we have the latest code...
vcs = common.getvcs(app['Repo Type'], app['Repo'], build_dir, sdk_path)
if app['Repo Type'] == 'git':
vcs.gotorevision(None)
elif app['Repo Type'] == 'git-svn':
vcs.gotorevision(None)
if app['Repo Type'] == 'srclib':
build_dir = os.path.join(build_dir, app['Repo'])
vcs.gotorevision(None)
if len(app['builds']) == 0:
return (None, "Can't use Tags with no builds defined")
app_dir = build_dir
if 'subdir' in app['builds'][-1]:
app_dir = os.path.join(app_dir, app['builds'][-1]['subdir'])
build_dir = os.path.join(build_dir, app['builds'][-1]['subdir'])
hver = None
hcode = "0"
@ -69,8 +73,8 @@ def check_tags(app, sdk_path):
vcs.gotorevision(tag)
# Only process tags where the manifest exists...
if os.path.exists(app_dir + '/AndroidManifest.xml'):
version, vercode, package = common.parse_androidmanifest(app_dir)
if os.path.exists(build_dir + '/AndroidManifest.xml'):
version, vercode, package = common.parse_androidmanifest(build_dir)
if package and package == app['id'] and version and vercode:
if int(vercode) > int(hcode):
hcode = str(int(vercode))
@ -100,13 +104,21 @@ def check_repomanifest(app, sdk_path, branch=None):
try:
build_dir = 'build/' + app['id']
if app['Repo Type'] == 'srclib':
build_dir = os.path.join('build', 'srclib')
repotype = common.getsrclibvcs(app['Repo'])
else:
build_dir = os.path.join('build/', app['id'])
repotype = app['Repo Type']
if app['Repo Type'] == 'bzr':
if repotype == 'bzr':
return (None, 'RepoManifest update mode has not been ported to bzr repositories yet')
# Set up vcs interface and make sure we have the latest code...
vcs = common.getvcs(app['Repo Type'], app['Repo'], build_dir, sdk_path)
if app['Repo Type'] == 'srclib':
build_dir = os.path.join(build_dir, app['Repo'])
if vcs.repotype() == 'git':
if branch:
vcs.gotorevision('origin/'+branch)
@ -114,7 +126,7 @@ def check_repomanifest(app, sdk_path, branch=None):
vcs.gotorevision('origin/master')
pass
elif vcs.repotype() == 'git-svn':
vcs.gotorevision('trunk')
vcs.gotorevision(None)
elif vcs.repotype() == 'svn':
vcs.gotorevision(None)
elif vcs.repotype() == 'hg':
@ -126,11 +138,10 @@ def check_repomanifest(app, sdk_path, branch=None):
if len(app['builds']) == 0:
return (None, "Can't use RepoManifest with no builds defined")
app_dir = build_dir
if 'subdir' in app['builds'][-1]:
app_dir = os.path.join(app_dir, app['builds'][-1]['subdir'])
build_dir = os.path.join(build_dir, app['builds'][-1]['subdir'])
version, vercode, package = common.parse_androidmanifest(app_dir)
version, vercode, package = common.parse_androidmanifest(build_dir)
if not package:
return (None, "Couldn't find package ID")
if package != app['id']:

View File

@ -35,9 +35,13 @@ def getvcs(vcstype, remote, local, sdk_path):
if vcstype == 'bzr':
return vcs_bzr(remote, local, sdk_path)
if vcstype == 'srclib':
return vcs_srclib(remote, local, sdk_path)
return getsrclib(remote, local, sdk_path, raw=True)
raise VCSException("Invalid vcs type " + vcstype)
def getsrclibvcs(name):
srclib_path = os.path.join('srclibs', name + ".txt")
return parse_srclib(srclib_path)['Repo Type']
class vcs:
def __init__(self, remote, local, sdk_path):
@ -340,29 +344,26 @@ class vcs_bzr(vcs):
cwd=self.local) != 0:
raise VCSException("Bzr revert failed")
class vcs_srclib(vcs):
def __init__(self, remote, local, sdk_path):
def repotype(self):
return 'srclib'
self.sdk_path = sdk_path
def gotorevisionx(self, rev):
srclib_dir = 'build/srclib'
if os.path.exists(self.local):
shutil.rmtree(self.local)
if self.remote.find(':') != -1:
srclib, path = self.remote.split(':')
index = remote.find('@')
if index != -1:
self.username = remote[:index]
remote = remote[index+1:]
index = self.username.find(':')
if index == -1:
raise VCSException("Password required with username")
self.password = self.username[index+1:]
self.username = self.username[:index]
else:
srclib = self.remote
path = None
libdir = getsrclib(srclib + '@' + rev, srclib_dir, self.sdk_path)
self.srclib = (srclib, libdir)
if path:
libdir = os.path.join(libdir, path)
shutil.copytree(libdir, self.local)
return self.local
self.username = None
self.remote = remote
self.local = local
self.refreshed = False
self.srclib = None
# Get the type expected for a given metadata field.
@ -964,9 +965,13 @@ def parse_srclib(metafile, **kw):
# Returns the path to it. Normally this is the path to be used when referencing
# it, which may be a subdirectory of the actual project. If you want the base
# directory of the project, pass 'basepath=True'.
def getsrclib(spec, srclib_dir, sdk_path, basepath=False):
def getsrclib(spec, srclib_dir, sdk_path, basepath=False, raw=False):
name, ref = spec.split('@')
if raw:
name = spec
ref = None
else:
name, ref = spec.split('@')
srclib_path = os.path.join('srclibs', name + ".txt")
@ -979,6 +984,9 @@ def getsrclib(spec, srclib_dir, sdk_path, basepath=False):
vcs = getvcs(srclib["Repo Type"], srclib["Repo"], sdir, sdk_path)
vcs.gotorevision(ref)
if raw:
return vcs
libdir = None
if srclib["Subdir"] is not None: