1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-09-17 18:50:11 +02:00

import: split out URL handling into its own function

This is preparation to add other import methods, like checking if the
command was run in a currently checked out git repo.
This commit is contained in:
Hans-Christoph Steiner 2015-08-05 20:42:58 +02:00
parent 9489e80f09
commit c80c1bf017
2 changed files with 63 additions and 56 deletions

View File

@ -70,71 +70,43 @@ config = None
options = None options = None
def main(): def get_metadata_from_url(app, url):
global config, options
# Parse command line...
parser = ArgumentParser()
parser.add_argument("-v", "--verbose", action="store_true", default=False,
help="Spew out even more information than normal")
parser.add_argument("-q", "--quiet", action="store_true", default=False,
help="Restrict output to warnings and errors")
parser.add_argument("-u", "--url", default=None,
help="Project URL to import from.")
parser.add_argument("-s", "--subdir", default=None,
help="Path to main android project subdirectory, if not in root.")
parser.add_argument("--rev", default=None,
help="Allows a different revision (or git branch) to be specified for the initial import")
options = parser.parse_args()
config = common.read_config(options)
if not options.url:
logging.error("Specify project url.")
sys.exit(1)
url = options.url
tmp_dir = 'tmp' tmp_dir = 'tmp'
if not os.path.isdir(tmp_dir): if not os.path.isdir(tmp_dir):
logging.info("Creating temporary directory") logging.info("Creating temporary directory")
os.makedirs(tmp_dir) os.makedirs(tmp_dir)
# Get all apps...
apps = metadata.read_metadata()
# Figure out what kind of project it is... # Figure out what kind of project it is...
projecttype = None projecttype = None
issuetracker = None app['Web Site'] = url # by default, we might override it
license = None
website = url # by default, we might override it
if url.startswith('git://'): if url.startswith('git://'):
projecttype = 'git' projecttype = 'git'
repo = url repo = url
repotype = 'git' repotype = 'git'
sourcecode = "" app['Source Code'] = ""
website = "" app['Web Site'] = ""
elif url.startswith('https://github.com'): elif url.startswith('https://github.com'):
projecttype = 'github' projecttype = 'github'
repo = url repo = url
repotype = 'git' repotype = 'git'
sourcecode = url app['Source Code'] = url
issuetracker = url + '/issues' app['issuetracker'] = url + '/issues'
website = "" app['Web Site'] = ""
elif url.startswith('https://gitlab.com/'): elif url.startswith('https://gitlab.com/'):
projecttype = 'gitlab' projecttype = 'gitlab'
repo = url repo = url
repotype = 'git' repotype = 'git'
sourcecode = url + '/tree/HEAD' app['Source Code'] = url + '/tree/HEAD'
issuetracker = url + '/issues' app['issuetracker'] = url + '/issues'
elif url.startswith('https://bitbucket.org/'): elif url.startswith('https://bitbucket.org/'):
if url.endswith('/'): if url.endswith('/'):
url = url[:-1] url = url[:-1]
projecttype = 'bitbucket' projecttype = 'bitbucket'
sourcecode = url + '/src' app['Source Code'] = url + '/src'
issuetracker = url + '/issues' app['issuetracker'] = url + '/issues'
# Figure out the repo type and adddress... # Figure out the repo type and adddress...
repotype, repo = getrepofrompage(sourcecode) repotype, repo = getrepofrompage(app['Source Code'])
if not repotype: if not repotype:
logging.error("Unable to determine vcs type. " + repo) logging.error("Unable to determine vcs type. " + repo)
sys.exit(1) sys.exit(1)
@ -166,6 +138,49 @@ def main():
else: else:
root_dir = src_dir root_dir = src_dir
app['Repo Type'] = repotype
app['Repo'] = repo
return root_dir, src_dir
config = None
options = None
def main():
global config, options
# Parse command line...
parser = ArgumentParser()
parser.add_argument("-v", "--verbose", action="store_true", default=False,
help="Spew out even more information than normal")
parser.add_argument("-q", "--quiet", action="store_true", default=False,
help="Restrict output to warnings and errors")
parser.add_argument("-u", "--url", default=None,
help="Project URL to import from.")
parser.add_argument("-s", "--subdir", default=None,
help="Path to main android project subdirectory, if not in root.")
parser.add_argument("--rev", default=None,
help="Allows a different revision (or git branch) to be specified for the initial import")
options = parser.parse_args()
config = common.read_config(options)
apps = metadata.read_metadata()
package, app = metadata.get_default_app_info_list(apps)
app['Update Check Mode'] = "Tags"
if os.path.isdir('.git'):
if options.url:
app['Web Site'] = options.url
elif options.url:
root_dir, src_dir = get_metadata_from_url(app, options.url)
else:
logging.error("Specify project url.")
sys.exit(1)
# Extract some information... # Extract some information...
paths = common.manifest_paths(root_dir, []) paths = common.manifest_paths(root_dir, [])
if paths: if paths:
@ -197,18 +212,6 @@ def main():
logging.error("Package " + package + " already exists") logging.error("Package " + package + " already exists")
sys.exit(1) sys.exit(1)
# Construct the metadata...
app = metadata.parse_txt_metadata(None)[1]
app['Web Site'] = website
app['Source Code'] = sourcecode
if issuetracker:
app['Issue Tracker'] = issuetracker
if license:
app['License'] = license
app['Repo Type'] = repotype
app['Repo'] = repo
app['Update Check Mode'] = "Tags"
# Create a build line... # Create a build line...
build = {} build = {}
build['version'] = version or '?' build['version'] = version or '?'
@ -230,9 +233,10 @@ def main():
# Keep the repo directory to save bandwidth... # Keep the repo directory to save bandwidth...
if not os.path.exists('build'): if not os.path.exists('build'):
os.mkdir('build') os.mkdir('build')
shutil.move(src_dir, os.path.join('build', package)) if src_dir is not None:
shutil.move(src_dir, os.path.join('build', package))
with open('build/.fdroidvcs-' + package, 'w') as f: with open('build/.fdroidvcs-' + package, 'w') as f:
f.write(repotype + ' ' + repo) f.write(app['Repo Type'] + ' ' + app['Repo'])
metadatapath = os.path.join('metadata', package + '.txt') metadatapath = os.path.join('metadata', package + '.txt')
metadata.write_metadata(metadatapath, app) metadata.write_metadata(metadatapath, app)

View File

@ -579,8 +579,11 @@ def split_list_values(s):
return [v for v in l if v] return [v for v in l if v]
def get_default_app_info_list(apps, metadatapath): def get_default_app_info_list(apps, metadatapath=None):
appid = os.path.splitext(os.path.basename(metadatapath))[0] if metadatapath is None:
appid = None
else:
appid = os.path.splitext(os.path.basename(metadatapath))[0]
if appid in apps: if appid in apps:
logging.critical("'%s' is a duplicate! '%s' is already provided by '%s'" logging.critical("'%s' is a duplicate! '%s' is already provided by '%s'"
% (metadatapath, appid, apps[appid]['metadatapath'])) % (metadatapath, appid, apps[appid]['metadatapath']))