Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
try:
# Do logging rotation
rotate()
yield
except Exception as e:
logging.exception("Fatal exception")
record_exception(e)
sys.exit(1)
except BaseException as e:
# You could logging.debug here to suppress the backtrace
# entirely, but there is no reason to hide it from technically
# savvy users.
logging.info("", exc_info=True)
record_exception(e)
sys.exit(1)
stack.
"""
# fix the HEAD pointer
self.sh.git("reset", "--soft", self.base_orig)
# update pull request information, update bases as necessary
# preferably do this in one network call
# push your commits (be sure to do this AFTER you update bases)
base_push_branches: List[str] = []
push_branches: List[str] = []
force_push_branches: List[str] = []
for i, s in enumerate(self.stack_meta):
# NB: GraphQL API does not support modifying PRs
if not s.closed:
logging.info(
"# Updating https://github.com/{owner}/{repo}/pull/{number}"
.format(owner=self.repo_owner,
repo=self.repo_name,
number=s.number))
self.github.patch(
"repos/{owner}/{repo}/pulls/{number}"
.format(owner=self.repo_owner, repo=self.repo_name,
number=s.number),
body=RE_STACK.sub(self._format_stack(i), s.body),
title=s.title)
else:
logging.info(
"# Skipping closed https://github.com/{owner}/{repo}/pull/{number}"
.format(owner=self.repo_owner,
repo=self.repo_name,
number=s.number))
new_pull = GitCommitHash(self.sh.git(
"commit-tree", tree,
"-p", "origin/" + branch_head(self.username, ghnum),
*base_args,
input='{} on "{}"\n\n{}\n\n[ghstack-poisoned]'.format(self.msg, elab_commit.title, non_orig_commit_msg)))
# Perform what is effectively an interactive rebase
# on the orig branch.
#
# Hypothetically, there could be a case when this isn't
# necessary, but it's INCREDIBLY unlikely (because we'd
# have to look EXACTLY like the original orig, and since
# we're in the branch that says "hey we changed
# something" that's probably not what happened.
logging.info("Restacking commit on {}".format(self.base_orig))
new_orig = GitCommitHash(self.sh.git(
"commit-tree", tree,
"-p", self.base_orig, input=summary))
push_branches = (
(new_base, "base"),
(new_pull, "head"),
(new_orig, "orig"),
)
if elab_commit.closed:
what = 'Skipped closed'
else:
what = 'Updated'
self.stack_meta.append(DiffMeta(
self.github.push_hook(new_branches)
# Time to open the PR
# NB: GraphQL API does not support opening PRs
r = self.github.post(
"repos/{owner}/{repo}/pulls"
.format(owner=self.repo_owner, repo=self.repo_name),
title=title,
head=branch_head(self.username, ghnum),
base=branch_base(self.username, ghnum),
body=pr_body,
maintainer_can_modify=True,
)
number = r['number']
logging.info("Opened PR #{}".format(number))
# Update the commit message of the local diff with metadata
# so we can correlate these later
pull_request_resolved = ghstack.diff.PullRequestResolved(
owner=self.repo_owner, repo=self.repo_name, number=number)
commit_msg = ("{commit_msg}\n\n"
"ghstack-source-id: {sourceid}\n"
"Pull Request resolved: "
"https://github.com/{owner}/{repo}/pull/{number}"
.format(commit_msg=commit.summary.rstrip(),
owner=self.repo_owner,
repo=self.repo_name,
number=number,
sourceid=commit.source_id))
# TODO: Try harder to preserve the old author/commit
"""
commit = elab_commit.diff
ghnum = elab_commit.ghnum
number = elab_commit.number
if ghnum in self.seen_ghnums:
raise RuntimeError(
"Something very strange has happened: a commit for "
"the pull request #{} occurs twice in your local "
"commit stack. This is usually because of a botched "
"rebase. Please take a look at your git log and seek "
"help from your local Git expert.".format(number))
self.seen_ghnums.add(ghnum)
logging.info("Pushing to #{}".format(number))
# Compute the local and remote source IDs
summary = commit.summary
m_local_source_id = RE_GHSTACK_SOURCE_ID.search(summary)
if m_local_source_id is None:
# For BC, just slap on a source ID. After BC is no longer
# needed, we can just error in this case; however, this
# situation is extremely likely to happen for preexisting
# stacks.
logging.warning(
"Local commit has no ghstack-source-id; assuming that it is "
"up-to-date with remote.")
summary = "{}\nghstack-source-id: {}".format(summary, commit.source_id)
else:
local_source_id = m_local_source_id.group(1)
if elab_commit.remote_source_id is None: