Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
cmd = 'git-bloom-release{0} melodic'
if 'BLOOM_VERBOSE' not in os.environ:
cmd = cmd.format(' --quiet')
else:
cmd = cmd.format('')
user(cmd, silent=False)
###
### Import upstream
###
# does the upstream branch exist?
assert branch_exists('upstream', local_only=True), "no upstream branch"
# does the upstrea/ tag exist?
ret, out, err = user('git tag', return_io=True)
assert out.count('upstream/' + version) == 1, "no upstream tag created"
# Is the package.xml from upstream in the upstream branch now?
with inbranch('upstream'):
assert os.path.exists('package.xml'), \
"upstream did not import: '" + os.getcwd() + "': " + \
str(os.listdir(os.getcwd()))
assert os.path.exists(os.path.join('debian', 'something.udev')), \
"Lost the debian overlaid files in upstream branch"
assert os.path.exists('white space.txt~'), \
"Lost file with whitespace in name in upstream branch"
with open('package.xml') as f:
package_xml = f.read()
assert package_xml.count(version), "not right file"
###
### Release generator
###
# patch import should have reported OK
assert ret == code.OK, "actually returned ({0})".format(ret)
assert ret == code.OK, "actually returned ({0})".format(ret)
# do the proper branches exist?
assert branch_exists('release/melodic/foo'), \
"no release/melodic/foo branch"
assert branch_exists('patches/release/melodic/foo'), \
"no patches/release/melodic/foo branch"
# was the release tag created?
ret, out, err = user('git tag', return_io=True)
expected = 'release/melodic/foo/' + version + '-1'
assert out.count(expected) == 1, \
"no release tag created, expected: '{0}'".format(expected)
###
### Make patch
###
with inbranch('release/melodic/foo'):
assert os.path.exists(os.path.join('debian', 'something.udev')), \
"Lost the debian overlaid files in release branch"
assert os.path.exists('white space.txt~'), \
"Lost file with whitespace in name in release branch"
assert os.path.islink('include/sym/foo.h'), "Symbolic link lost during pipeline"
if os.path.exists('include/foo.h'):
user('git rm include/foo.h')
else:
if not os.path.exists('include'):
os.makedirs('include')
user('touch include/foo.h')
user('git add include/foo.h')
user('git commit -m "A release patch" --allow-empty')
###
### Test import and export
def match_branches_with_prefix(prefix, get_branches, prune=False):
debug("match_branches_with_prefix(" + str(prefix) + ", " +
str(get_branches()) + ")")
branches = []
# Match branches
existing_branches = get_branches()
for branch in existing_branches:
if branch.startswith('remotes/origin/'):
branch = branch.split('/', 2)[-1]
if branch.startswith(prefix):
branches.append(branch)
branches = list(set(branches))
if prune:
# Prune listed branches by packages in latest upstream
with inbranch('upstream'):
pkg_names, version, pkgs_dict = get_package_data('upstream')
for branch in branches:
if branch.split(prefix)[-1].strip('/') not in pkg_names:
branches.remove(branch)
return branches
def write_tracks_dict_raw(tracks_dict, cmt_msg=None, directory=None):
upconvert_bloom_to_config_branch()
cmt_msg = cmt_msg if cmt_msg is not None else 'Modified tracks.yaml'
with inbranch(BLOOM_CONFIG_BRANCH):
with open('tracks.yaml', 'w') as f:
f.write(yaml.safe_dump(tracks_dict, indent=2, default_flow_style=False))
execute_command('git add tracks.yaml', cwd=directory)
execute_command('git commit --allow-empty -m "{0}"'.format(cmt_msg),
cwd=directory)
execute_command('git rm -rf ./*')
with open(PLACEHOLDER_FILE, 'w') as f:
f.write("""\
This branch ('bloom') has been deprecated in favor of storing settings and overlay files in the master branch.
Please goto the master branch for anything which referenced the bloom branch.
You can delete this branch at your convenience.
""")
execute_command('git add ' + PLACEHOLDER_FILE)
if has_changes():
execute_command('git commit -m "DEPRECATING BRANCH"')
if not branch_exists(BLOOM_CONFIG_BRANCH):
info("Creating '{0}' branch.".format(BLOOM_CONFIG_BRANCH))
create_branch(BLOOM_CONFIG_BRANCH, orphaned=True)
with inbranch(BLOOM_CONFIG_BRANCH):
my_copytree(configs, git_root)
execute_command('git add ./*')
if has_changes():
execute_command('git commit -m '
'"Moving configs from bloom branch"')
finally:
# Clean up
if os.path.exists(tmp_dir):
shutil.rmtree(tmp_dir)
track_branches(['bloom', BLOOM_CONFIG_BRANCH])
if show('bloom', PLACEHOLDER_FILE) is not None:
return
if show('bloom', 'bloom.conf') is not None:
# Wait for the bloom.conf upconvert...
return
if not branch_exists('bloom'):
return
_has_checked_bloom_branch = True
info("Moving configurations from deprecated 'bloom' branch "
"to the '{0}' branch.".format(BLOOM_CONFIG_BRANCH))
tmp_dir = mkdtemp()
git_root = get_root()
try:
# Copy the new upstream source into the temporary directory
with inbranch('bloom'):
ignores = ('.git', '.gitignore', '.svn', '.hgignore', '.hg', 'CVS')
configs = os.path.join(tmp_dir, 'configs')
my_copytree(git_root, configs, ignores)
if [x for x in os.listdir(os.getcwd()) if x not in ignores]:
execute_command('git rm -rf ./*')
with open(PLACEHOLDER_FILE, 'w') as f:
f.write("""\
This branch ('bloom') has been deprecated in favor of storing settings and overlay files in the master branch.
Please goto the master branch for anything which referenced the bloom branch.
You can delete this branch at your convenience.
""")
execute_command('git add ' + PLACEHOLDER_FILE)
if has_changes():
execute_command('git commit -m "DEPRECATING BRANCH"')
@inbranch(patches_branch, directory=directory)
def fn(config):
global _patch_config_keys
conf_path = 'patches.conf'
if directory is not None:
conf_path = os.path.join(directory, conf_path)
config_keys = list(config.keys())
config_keys.sort()
if _patch_config_keys != config_keys:
raise RuntimeError("Invalid config passed to set_patch_config")
cmd = 'git config -f {0} patches.'.format(conf_path)
try:
for key in config:
_cmd = cmd + key + ' "' + config[key] + '"'
execute_command(_cmd, cwd=directory)
# Stage the patches.conf file
cmd = 'git add ' + conf_path
@inbranch('bloom')
def convert_old_bloom_conf(prefix=None):
prefix = prefix if prefix is not None else 'convert'
tracks_dict = get_tracks_dict_raw()
track = prefix
track_count = 0
while track in tracks_dict['tracks']:
track_count += 1
track = prefix + str(track_count)
track_dict = copy.copy(DEFAULT_TEMPLATE)
cmd = 'git config -f bloom.conf bloom.upstream'
upstream_repo = check_output(cmd, shell=True).strip()
cmd = 'git config -f bloom.conf bloom.upstreamtype'
upstream_type = check_output(cmd, shell=True).strip()
try:
cmd = 'git config -f bloom.conf bloom.upstreambranch'
upstream_branch = check_output(cmd, shell=True).strip()
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"')