1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-09-11 23:23:27 +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
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)
if not options.url:
logging.error("Specify project url.")
sys.exit(1)
url = options.url
def get_metadata_from_url(app, url):
tmp_dir = 'tmp'
if not os.path.isdir(tmp_dir):
logging.info("Creating temporary directory")
os.makedirs(tmp_dir)
# Get all apps...
apps = metadata.read_metadata()
# Figure out what kind of project it is...
projecttype = None
issuetracker = None
license = None
website = url # by default, we might override it
app['Web Site'] = url # by default, we might override it
if url.startswith('git://'):
projecttype = 'git'
repo = url
repotype = 'git'
sourcecode = ""
website = ""
app['Source Code'] = ""
app['Web Site'] = ""
elif url.startswith('https://github.com'):
projecttype = 'github'
repo = url
repotype = 'git'
sourcecode = url
issuetracker = url + '/issues'
website = ""
app['Source Code'] = url
app['issuetracker'] = url + '/issues'
app['Web Site'] = ""
elif url.startswith('https://gitlab.com/'):
projecttype = 'gitlab'
repo = url
repotype = 'git'
sourcecode = url + '/tree/HEAD'
issuetracker = url + '/issues'
app['Source Code'] = url + '/tree/HEAD'
app['issuetracker'] = url + '/issues'
elif url.startswith('https://bitbucket.org/'):
if url.endswith('/'):
url = url[:-1]
projecttype = 'bitbucket'
sourcecode = url + '/src'
issuetracker = url + '/issues'
app['Source Code'] = url + '/src'
app['issuetracker'] = url + '/issues'
# Figure out the repo type and adddress...
repotype, repo = getrepofrompage(sourcecode)
repotype, repo = getrepofrompage(app['Source Code'])
if not repotype:
logging.error("Unable to determine vcs type. " + repo)
sys.exit(1)
@ -166,6 +138,49 @@ def main():
else:
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...
paths = common.manifest_paths(root_dir, [])
if paths:
@ -197,18 +212,6 @@ def main():
logging.error("Package " + package + " already exists")
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...
build = {}
build['version'] = version or '?'
@ -230,9 +233,10 @@ def main():
# Keep the repo directory to save bandwidth...
if not os.path.exists('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:
f.write(repotype + ' ' + repo)
f.write(app['Repo Type'] + ' ' + app['Repo'])
metadatapath = os.path.join('metadata', package + '.txt')
metadata.write_metadata(metadatapath, app)

View File

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