msger.error('can\'t get correct name.')
package = spec.name
- base_prj = args.base_obsprj
+ base_prj = None
+ if args.base_obsprj:
+ base_prj = args.base_obsprj
+ elif obsconf.base:
+ base_prj = obsconf.base
if args.target_obsprj is None:
- target_prj = obsconf.target or \
- "home:%s:gbs:%s" % (apiurl.user, base_prj)
+ if obsconf.target:
+ target_prj = obsconf.target
+ else:
+ target_prj = "home:%s:gbs" % apiurl.user
+ if base_prj:
+ target_prj += ":%s" % base_prj
else:
target_prj = args.target_obsprj
msger.error('failed to get commit info: %s' % exc)
files = glob.glob("%s/*" % exportdir)
+ build_repos = None
try:
msger.info('checking status of obs project: %s ...' % target_prj)
+ if not api.exists(target_prj):
+ msger.info('creating new project %s' % (target_prj))
+ api.create_project(target_prj, base_prj)
+ else:
+ build_repos = api.get_repos_of_project(target_prj)
+ if not build_repos:
+ msger.warning("no available build repos for %s" % target_prj)
if api.exists(target_prj, package):
old, _not_changed, changed, new = api.diff_files(target_prj,
package, files)
api.remove_files(target_prj, package, old)
commit_files = changed + new
else:
- msger.info('copying settings of %s to %s' % (base_prj, target_prj))
- api.copy_project(base_prj, target_prj)
msger.info('creating new package %s/%s' % (target_prj, package))
api.create_package(target_prj, package)
# new project - submitting all local files
msger.error(str(err))
if not commit_files:
- msger.warning("No local changes found. Triggering rebuild")
- api.rebuild(target_prj, package, obs_arch)
+ if build_repos:
+ msger.warning("no local changes found. Triggering rebuild")
+ api.rebuild(target_prj, package, obs_arch)
+ else:
+ msger.warning("no local changes found. can't trigger rebuild "
+ "as no available build repos found")
+ return 0
else:
msger.info('commit packaging files to build server ...')
commit_files = [(fpath, fpath in commit_files) for fpath in files]
raise OSCError('Got empty response from %s %s' % \
(method.func_name.split('_')[-1], url))
- def copy_project(self, src, target, rewrite=False):
+ def get_repos_of_project(self, project):
+ repos = defaultdict(list)
+ for repo in core.get_repos_of_project(self.apiurl, project):
+ repos[repo.name].append(repo.arch)
+ return repos
+
+ def create_project(self, target, src=None, rewrite=False):
"""
Create new OBS project based on existing project.
Copy config and repositories from src project to target
+ if src exists.
"""
- if not self.exists(src):
+ if src and not self.exists(src):
raise ObsError('base project: %s not exists' % src)
if self.exists(target):
'<person role="maintainer" userid="%s"/>' % \
(target, conf.get_apiurl_usr(self.apiurl))
- # Collect source repos
- repos = defaultdict(list)
- for repo in core.get_repos_of_project(self.apiurl, src):
- repos[repo.name].append(repo.arch)
-
- # Copy repos to target
- for name in repos:
- meta += '<repository name="%s">' % name
- meta += '<path project="%s" repository="%s" />' % (src, name)
- for arch in repos[name]:
- meta += "<arch>%s</arch>\n" % arch
- meta += "</repository>\n"
+ # Collect source repos if src project exist
+ if src:
+ # Copy repos to target
+ repos = self.get_repos_of_project(src)
+ for name in repos:
+ meta += '<repository name="%s">' % name
+ meta += '<path project="%s" repository="%s" />' % (src, name)
+ for arch in repos[name]:
+ meta += "<arch>%s</arch>\n" % arch
+ meta += "</repository>\n"
+ else:
+ msger.warning('no project repos in target project, please add '
+ 'repos from OBS webUI manually, or specify base project '
+ 'with -B <base_prj>, then gbs can help to set repos '
+ 'using the settings of the specified base project.')
meta += "</project>\n"
try:
M2Crypto.SSL.SSLError), err:
raise ObsError("Can't set meta for %s: %s" % (target, str(err)))
+ # don't need set project config if no src project
+ if not src:
+ return
+
# copy project config
try:
config = core.show_project_conf(self.apiurl, src)
help='path to git repository')
parser.add_argument('-T', '--target-obsprj',
- help='OBS project where package will be checked in '
- '(default is home:<userid>:gbs:Tizen:Main)')
- parser.add_argument('-B', '--base-obsprj', default="Tizen:Main",
- help='OBS project to branch from')
+ help='OBS project where package will be checked in. '
+ 'Default is home:<userid>:gbs:<base_prj>, you can '
+ 'set default target_prj in .gbs.conf')
+ parser.add_argument('-B', '--base-obsprj',
+ help='OBS project being used to branch from, you can '
+ 'set default base_prj in .gbs.conf')
parser.add_argument('-P', '--profile',
help='profile to be used for building, can be given '
'without the "profile." prefix')