Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
title, pr_body = self._default_title_and_body(commit, None)
# Determine the next available GhNumber. We do this by
# iterating through known branches and keeping track
# of the max. The next available GhNumber is the next number.
# This is technically subject to a race, but we assume
# end user is not running this script concurrently on
# multiple machines (you bad bad)
refs = self.sh.git(
"for-each-ref",
"refs/remotes/origin/gh/{}".format(self.username),
"--format=%(refname)").split()
max_ref_num = max(int(ref.split('/')[-2]) for ref in refs) \
if refs else 0
ghnum = GhNumber(str(max_ref_num + 1))
# Create the incremental pull request diff
tree = commit.patch.apply(self.sh, self.base_tree)
# Actually, if there's no change in the tree, stop processing
if tree == self.base_tree:
self.ignored_diffs.append((commit, None))
logging.warn("Skipping {} {}, as the commit has no changes"
.format(commit.oid, title))
return
assert ghnum not in self.seen_ghnums
self.seen_ghnums.add(ghnum)
new_pull = GitCommitHash(
self.sh.git("commit-tree", tree,
If you think this is in error, edit the Summary in the Phabricator diff
to delete the line 'Pull Request resolved' and then run ghexport again.
''')
else:
raise RuntimeError('''\
This commit appears to already be associated with a pull request,
but the pull request doesn't look like it was submitted by ghstack.
If you think this is in error, run:
ghstack unlink {}
to disassociate the commit with the pull request, and then try again.
(This will create a new pull request!)
'''.format(commit.oid))
gh_number = GhNumber(m.group(1))
# NB: Technically, we don't need to pull this information at
# all, but it's more convenient to unconditionally edit
# title/body when we update the pull request info
title = r['title']
pr_body = r['body']
if self.update_fields:
title, pr_body = self._default_title_and_body(commit, pr_body)
# TODO: remote summary should be done earlier so we can use
# it to test if updates are necessary
remote_summary = ghstack.git.split_header(
self.sh.git(
"rev-list", "--max-count=1", "--header", "origin/" + branch_orig(self.username, gh_number)
)
)[0]
# Description of all the diffs we submitted; to be populated
# by Submitter.
stack_meta: List[DiffMeta]
# List of input diffs which we ignored (i.e., treated as if they
# did not exist on the stack at all), because they were associated
# with a patch that contains no changes. GhNumber may be false
# if the diff was never associated with a PR.
ignored_diffs: List[Tuple[ghstack.diff.Diff, Optional[GitHubNumber]]]
# List of diffs to process, in chronological order
stack: List[ghstack.diff.Diff]
# Set of seen ghnums
seen_ghnums: Set[GhNumber]
# String used to describe the stack in question
stack_header: str
# Clobber existing PR description with local commit message
update_fields: bool
# Print only PR URL to stdout
short: bool
# Force an update to GitHub, even if we think that your local copy
# is stale.
force: bool
# Do not skip unchanged diffs
no_skip: bool