Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
distro = destination.split('/')[-2]
# Create debians for each distro
with inbranch(destination):
data = self.generate_debian(package, distro)
# Create the tag name for later
self.tag_names[destination] = self.generate_tag_name(data)
# Update the patch configs
patches_branch = 'patches/' + destination
config = get_patch_config(patches_branch)
# Store it
self.store_original_config(config, patches_branch)
# Modify the base so import/export patch works
current_branch = get_current_branch()
if current_branch is None:
error("Could not determine current branch.", exit=True)
config['base'] = get_commit_hash(current_branch)
# Set it
set_patch_config(patches_branch, config)
# Execute the rebase
if without_git_rebase:
non_git_rebase(config['parent'], directory=directory)
else:
git_rebase(config['parent'], directory=directory)
# Update the patches information
# Get the latest configs
config = get_patch_config(patches_branch, directory)
# Set the base to the current hash (before patches)
current_branch_ = get_current_branch(directory)
debug('Current branch: ' + current_branch_ or 'could not determine branch')
config['base'] = get_commit_hash(current_branch_, directory)
debug('New current commit hash after rebase: ' + config['base'])
# Set the new upstream hash to the previous upstream hash
config['previous'] = get_commit_hash(config['parent'], directory)
debug('New parent commit hash after rebase: ' + config['previous'])
# Clear the trimbase (it needs to be reapplied)
config['trimbase'] = ''
# Write the new configs
set_patch_config(patches_branch, config, directory)
error("The patches branch ({0}) does not ".format(patches_branch) +
"exist, did you use git-bloom-branch?", exit=True)
# Create a swap space
tmp_dir = tempfile.mkdtemp()
try:
# Get parent branch and base commit from patches branch
config = get_patch_config(patches_branch, directory)
parent_branch, commit = config['parent'], config['base']
if commit != get_commit_hash(current_branch, directory):
debug(
"commit != get_commit_hash(current_branch, directory)"
)
debug(
"{0} != get_commit_hash({1}, {2}) != {3}".format(
commit, current_branch, directory,
get_commit_hash(current_branch, directory)
)
)
os.system('git log')
warning(
"The current commit is not the same as the most recent "
"rebase commit."
)
warning(
"This might mean that you have committed since the last "
"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:"
def _undo(config, directory):
debug("_undo(" + str(config) + ", " + str(directory) + ")")
# TODO: handle repo with changes
# TODO: handle repo with patches applied
if config['trimbase'] == '':
debug("Branch has not been trimmed previously, undo not required.")
return None
# Reset with git-revert
current_branch = get_current_branch(directory)
if current_branch is None:
error("Could not determine current branch.", exit=True)
cmt = get_commit_hash(current_branch, directory)
cmd = 'git revert --no-edit -Xtheirs ' + config['trimbase'] + '..' + cmt
execute_command(cmd, cwd=directory)
# Unset the trimbase
config['trimbase'] = ''
return config
# Patches config not setup, set it up
config = {
'parent': src,
'previous': '',
'base': get_commit_hash(dst, directory=directory),
'trim': '',
'trimbase': ''
}
set_patch_config(dst_patches, config, directory=directory)
else:
config = get_patch_config(dst_patches, directory=directory)
if config['parent'] != src:
warning("Updated parent to '{0}' from '{1}'"
.format(src, config['parent']))
config['parent'] = src
config['base'] = get_commit_hash(dst, directory=directory)
set_patch_config(dst_patches, config, directory=directory)
# Command successful, do not switch back to previous branch
current_branch = None
finally:
if current_branch is not None:
checkout(current_branch, directory=directory)
def _trim(config, force, directory):
debug("_trim(" + str(config) + ", " + str(force) + ", " +
str(directory) + ")")
if config['trimbase'] != '':
warning("It looks like the trim operation has already been done, "
"nested trimming is not supported.")
if force:
warning("Proceeding anyways because of '--force'")
else:
warning("If you would like to continue anyways use '--force'")
return None
current_branch = get_current_branch(directory)
if current_branch is None:
error("Could not determine current branch.", exit=True)
config['trimbase'] = get_commit_hash(current_branch)
tmp_dir = tempfile.mkdtemp()
try:
# Buckup trim sub directory
git_root = get_root()
sub_dir = os.path.join(git_root, config['trim'])
storage = os.path.join(tmp_dir, config['trim'])
shutil.copytree(sub_dir, storage)
# Clear out any untracked files
execute_command('git clean -fdx', cwd=directory)
# Collect al files (excluding .git)
items = []
for item in os.listdir(git_root):
if item in ['.git', '..', '.']:
continue
items.append(item)
# Remove and .* files missed by 'git rm -rf *'
# Construct the patches branch name
patches_branch = 'patches/' + current_branch
# Ensure the patches branch exists and is tracked
if branch_exists(patches_branch, False, directory=directory):
if not branch_exists(patches_branch, True, directory=directory):
track_branches(patches_branch, directory)
else:
error("The patches branch ({0}) does not ".format(patches_branch) +
"exist, did you use git-bloom-branch?", exit=True)
# Create a swap space
tmp_dir = tempfile.mkdtemp()
try:
# Get parent branch and base commit from patches branch
config = get_patch_config(patches_branch, directory)
parent_branch, commit = config['parent'], config['base']
if commit != get_commit_hash(current_branch, directory):
debug(
"commit != get_commit_hash(current_branch, directory)"
)
debug(
"{0} != get_commit_hash({1}, {2}) != {3}".format(
commit, current_branch, directory,
get_commit_hash(current_branch, directory)
)
)
os.system('git log')
warning(
"The current commit is not the same as the most recent "
"rebase commit."
)
warning(
"This might mean that you have committed since the last "
"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)