Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
from bloom.packages import get_package_data
from bloom.util import execute_command
from bloom.commands.git.patch.trim_cmd import trim
try:
import catkin_pkg
from pkg_resources import parse_version
if parse_version(catkin_pkg.__version__) < parse_version('0.3.8'):
warning("This version of bloom requires catkin_pkg version >= '0.3.8',"
" the used version of catkin_pkg is '{0}'".format(catkin_pkg.__version__))
from catkin_pkg import metapackage
except ImportError as err:
debug(traceback.format_exc())
error("catkin_pkg was not detected, please install it.", exit=True)
class ReleaseGenerator(BloomGenerator):
title = 'release'
description = """\
Generates a release branch for each of the packages in the source branch.
The common use case for this generator is to produce release/* branches for
each package in the upstream repository, so the source branch should be set to
'upstream' and the prefix set to 'release'.
"""
def prepare_arguments(self, parser):
# Add command line arguments for this generator
add = parser.add_argument
add('-s', '--src', '--source-branch', default=None, dest='src',
def get_index_url():
global _rosdistro_index_commit, _rosdistro_index_original_branch
index_url = rosdistro.get_index_url()
pr = urlparse(index_url)
if pr.netloc in ['raw.github.com', 'raw.githubusercontent.com']:
# Try to determine what the commit hash was
tokens = [x for x in pr.path.split('/') if x]
if len(tokens) <= 3:
debug("Failed to get commit for rosdistro index file: index url")
debug(tokens)
return index_url
owner = tokens[0]
repo = tokens[1]
branch = tokens[2]
gh = get_github_interface(quiet=True)
if gh is None:
# Failed to get it with auth, try without auth (may fail)
gh = Github(username=None, auth=None)
try:
data = gh.get_branch(owner, repo, branch)
except GithubException:
debug(traceback.format_exc())
debug("Failed to get commit for rosdistro index file: api")
return index_url
_rosdistro_index_commit = data.get('commit', {}).get('sha', None)
def get_index_url():
global _rosdistro_index_commit, _rosdistro_index_original_branch
index_url = rosdistro.get_index_url()
pr = urlparse(index_url)
if pr.netloc in ['raw.github.com', 'raw.githubusercontent.com']:
# Try to determine what the commit hash was
tokens = [x for x in pr.path.split('/') if x]
if len(tokens) <= 3:
debug("Failed to get commit for rosdistro index file: index url")
debug(tokens)
return index_url
owner = tokens[0]
repo = tokens[1]
branch = tokens[2]
gh = get_github_interface(quiet=True)
if gh is None:
# Failed to get it with auth, try without auth (may fail)
gh = Github(username=None, auth=None)
try:
data = gh.get_branch(owner, repo, branch)
except GithubException:
debug(traceback.format_exc())
debug("Failed to get commit for rosdistro index file: api")
return index_url
_rosdistro_index_commit = data.get('commit', {}).get('sha', None)
if _rosdistro_index_commit is not None:
tokens = [x for x in pr.path.split('/') if x]
if len(tokens) <= 3:
debug("Failed to get commit for rosdistro index file: index url")
debug(tokens)
return index_url
owner = tokens[0]
repo = tokens[1]
branch = tokens[2]
gh = get_github_interface(quiet=True)
if gh is None:
# Failed to get it with auth, try without auth (may fail)
gh = Github(username=None, auth=None)
try:
data = gh.get_branch(owner, repo, branch)
except GithubException:
debug(traceback.format_exc())
debug("Failed to get commit for rosdistro index file: api")
return index_url
_rosdistro_index_commit = data.get('commit', {}).get('sha', None)
if _rosdistro_index_commit is not None:
info("ROS Distro index file associate with commit '{0}'"
.format(_rosdistro_index_commit))
# Also mutate the index_url to use the commit (rather than the moving branch name)
base_info = get_gh_info(index_url)
base_branch = base_info['branch']
rosdistro_index_commit = _rosdistro_index_commit # Copy global into local for substitution
middle = "{org}/{repo}".format(**base_info)
index_url = index_url.replace("{pr.netloc}/{middle}/{base_branch}/".format(**locals()),
"{pr.netloc}/{middle}/{rosdistro_index_commit}/".format(**locals()))
info("New ROS Distro index url: '{0}'".format(index_url))
_rosdistro_index_original_branch = base_branch
else:
def set_releaser_history(self, history):
# Assumes that this is called in the target branch
patches_branch = 'patches/' + get_current_branch()
debug("Writing release history to '{0}' branch".format(patches_branch))
with inbranch(patches_branch):
with open('releaser_history.json', 'w') as f:
f.write(json.dumps(history))
execute_command('git add releaser_history.json')
if has_changes():
execute_command('git commit -m "Store releaser history"')
except subprocess.CalledProcessError:
upstream_branch = ''
for key in template_entry_order:
if key == 'vcs_uri':
track_dict[key] = upstream_repo
continue
if key == 'vcs_type':
track_dict[key] = upstream_type
continue
if key == 'vcs_uri':
track_dict[key] = upstream_branch or None
continue
track_dict[key] = track_dict[key].default
debug('Converted bloom.conf:')
with open('bloom.conf', 'r') as f:
debug(f.read())
debug('To this track:')
debug(str({track: track_dict}))
tracks_dict['tracks'][track] = track_dict
write_tracks_dict_raw(tracks_dict)
execute_command('git rm bloom.conf', shell=True)
execute_command('git commit -m "Removed bloom.conf"', shell=True)
# Now move the old bloom branch into master
upconvert_bloom_to_config_branch()
"time you did:"
)
warning(
" 'git-bloom-patch rebase' or 'git-bloom-patch remove'"
)
warning(
"Make sure you export any commits you want to save first:"
)
warning(" 'git-bloom-patch export'")
error("Patches not exported", exit=True)
# Checkout to the patches branch
checkout(patches_branch, directory=directory)
# Copy the patches to a temp location
patches = list_patches(directory)
if len(patches) == 0:
debug("No patches in the patches branch, nothing to do")
return -1 # Indicates that nothing was done
tmp_dir_patches = []
for patch in patches:
tmp_dir_patches.append(os.path.join(tmp_dir, patch))
if directory is not None:
patch = os.path.join(directory, patch)
shutil.copy(patch, tmp_dir)
# Now checkout back to the original branch and import them
checkout(current_branch, directory=directory)
try:
cmd = 'git am {0}*.patch'.format(tmp_dir + os.sep)
execute_command(cmd, cwd=directory)
except subprocess.CalledProcessError as e:
warning("Failed to apply one or more patches for the "
"'{0}' branch.".format(str(e)))
info('', use_prefix=False)
def set_releaser_history(self, history):
# Assumes that this is called in the target branch
patches_branch = 'patches/' + get_current_branch()
debug("Writing release history to '{0}' branch".format(patches_branch))
with inbranch(patches_branch):
with open('releaser_history.json', 'w') as f:
f.write(json.dumps(history))
execute_command('git add releaser_history.json')
if has_changes():
execute_command('git commit -m "Store releaser history"')
def try_execute(msg, err_msg, func, *args, **kwargs):
retcode = 0
try:
retcode = func(*args, **kwargs)
retcode = retcode if retcode is not None else 0
except CalledProcessError as err:
print_exc(traceback.format_exc())
error("Error calling {0}: {1}".format(msg, str(err)))
retcode = err.returncode
ret_msg = msg + " returned exit code ({0})".format(str(retcode))
if retcode > 0:
error(ret_msg)
raise CommandFailed(retcode)
elif retcode < 0:
debug(ret_msg)
return retcode
for key in template_entry_order:
if key == 'vcs_uri':
track_dict[key] = upstream_repo
continue
if key == 'vcs_type':
track_dict[key] = upstream_type
continue
if key == 'vcs_uri':
track_dict[key] = upstream_branch or None
continue
track_dict[key] = track_dict[key].default
debug('Converted bloom.conf:')
with open('bloom.conf', 'r') as f:
debug(f.read())
debug('To this track:')
debug(str({track: track_dict}))
tracks_dict['tracks'][track] = track_dict
write_tracks_dict_raw(tracks_dict)
execute_command('git rm bloom.conf', shell=True)
execute_command('git commit -m "Removed bloom.conf"', shell=True)
# Now move the old bloom branch into master
upconvert_bloom_to_config_branch()