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 rm ./*.patch'
execute_command(cmd, cwd=directory)
# Create the patches using git format-patch
cmd = "git format-patch -M -B " \
"{0}...{1}".format(config['base'], current_branch)
execute_command(cmd, cwd=directory)
# Report of the number of patches created
patches_list = list_patches(directory)
debug("Created {0} patches".format(len(patches_list)))
# Clean up and commit
if len(patches_list) > 0:
cmd = 'git add ./*.patch'
execute_command(cmd, cwd=directory)
if has_changes(directory):
cmd = 'git commit -m "Updating patches."'
execute_command(cmd, cwd=directory)
finally:
if current_branch:
checkout(current_branch, directory=directory)
def store_original_config(self, config, patches_branch):
with inbranch(patches_branch):
with open('debian.store', 'w+') as f:
f.write(json.dumps(config))
execute_command('git add debian.store')
if has_changes():
execute_command('git commit -m "Store original patch config"')
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"')
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)
error("Answered no to continue, aborting.", exit=True)
elif 'BLOOM_CLEAR_DEBIAN_ON_GENERATION' in os.environ:
warning("Overwriting debian directory: " + debian_dir)
execute_command('git rm -rf ' + debian_dir)
execute_command('git commit -m "Clearing previous debian folder"')
if os.path.exists(debian_dir):
shutil.rmtree(debian_dir)
else:
warning("Not overwriting debian directory.")
# Use generic place template files command
place_template_files('.', build_type, gbp=True)
# Commit results
execute_command('git add ' + debian_dir)
_, has_files, _ = execute_command('git diff --cached --name-only', return_io=True)
if has_files:
execute_command('git commit -m "Placing debian template files"')
def import_patches(patches_path, patches_path_dict, target_branch, version):
info("Overlaying files from patched folder '{0}' on the '{2}' branch into the '{1}' branch..."
.format(patches_path, target_branch, BLOOM_CONFIG_BRANCH))
with inbranch(target_branch):
handle_tree(patches_path_dict, '', patches_path, version)
cmd = ('git commit --allow-empty -m "Overlaid patches from \'{0}\'"'
.format(patches_path))
execute_command(cmd, shell=True)
else:
shutil.copy(src, dst)
# Stage
execute_command('git add ./*', cwd=directory)
# Collect .* files
dot_items = []
for item in os.listdir(git_root):
if item in ['.git', '..', '.']:
continue
if item.startswith('.'):
dot_items.append(item)
# Add any .* files missed by 'git add ./*'
if len(dot_items) > 0:
execute_command('git add ' + ' '.join(dot_items), cwd=directory)
# Remove any straggling untracked files
execute_command('git clean -dXf', cwd=directory)
# Commit
cmd = 'git commit -m "Trimmed the branch to only the ' + \
config['trim'] + ' sub directory"'
execute_command(cmd, cwd=directory)
# Update the patch base to be this commit
current_branch = get_current_branch(directory)
if current_branch is None:
error("Could not determine current branch.", exit=True)
config['base'] = get_commit_hash(current_branch)
finally:
if os.path.exists(tmp_dir):
shutil.rmtree(tmp_dir)
return config
return True
fail_msg = ''
git_root = get_root(directory)
if git_root is not None:
changes = has_changes(directory)
untracked = has_untracked_files(directory)
branch = get_current_branch(directory) or 'could not determine branch'
else:
fail_msg = "is not a git repository"
if fail_msg == '' and changes:
fail_msg = "has local changes"
if fail_msg == '' and untracked:
fail_msg = "has untracked files"
try:
if not changes and not untracked:
execute_command('git checkout "{0}"'.format(str(reference)),
cwd=directory)
except CalledProcessError as err:
fail_msg = "CalledProcessError: " + str(err)
if raise_exc:
checkout_summarize(fail_msg, branch, directory)
raise
if fail_msg != '':
return checkout_summarize(fail_msg, branch, directory)
else:
return True
def place_template_files(self, build_type, debian_dir='debian'):
# Create/Clean the debian folder
if os.path.exists(debian_dir):
if self.interactive:
warning("debian directory exists: " + debian_dir)
warning("Do you wish to overwrite it?")
if not maybe_continue('y'):
error("Answered no to continue, aborting.", exit=True)
elif 'BLOOM_CLEAR_DEBIAN_ON_GENERATION' in os.environ:
warning("Overwriting debian directory: " + debian_dir)
execute_command('git rm -rf ' + debian_dir)
execute_command('git commit -m "Clearing previous debian folder"')
if os.path.exists(debian_dir):
shutil.rmtree(debian_dir)
else:
warning("Not overwriting debian directory.")
# Use generic place template files command
place_template_files('.', build_type, gbp=True)
# Commit results
execute_command('git add ' + debian_dir)
_, has_files, _ = execute_command('git diff --cached --name-only', return_io=True)
if has_files:
execute_command('git commit -m "Placing debian template files"')
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)
if not branch_exists(patches_branch, True, directory=directory):
track_branches(patches_branch, directory)
else:
error("No patches branch (" + patches_branch + ") found, cannot "
"remove patches.", exit=True)
# Get the parent branch from the patches branch
config = get_patch_config(patches_branch, directory=directory)
parent, spec = config['parent'], config['base']
if None in [parent, spec]:
error("Could not retrieve patches info.", exit=True)
debug("Removing patches from " + current_branch + " back to base "
"commit " + spec)
# Reset this branch using git revert --no-edit spec
current_commit = get_commit_hash(current_branch, directory)
command_spec = spec + '..' + current_commit
execute_command(
'git revert --no-edit -Xtheirs ' + command_spec, cwd=directory
)
# Update the base
config['base'] = get_commit_hash(current_branch, directory)
set_patch_config(patches_branch, config, directory=directory)
finally:
if current_branch:
checkout(current_branch, directory=directory)