try fix base tree
This commit is contained in:
parent
90b04fe25b
commit
b0303827bb
4 changed files with 42 additions and 15 deletions
25
dist/index.js
vendored
25
dist/index.js
vendored
|
@ -154,6 +154,7 @@ function createOrUpdateBranch(git, commitMessage, base, branch, branchRemoteName
|
|||
action: 'none',
|
||||
base: base,
|
||||
hasDiffWithBase: false,
|
||||
baseSha: '',
|
||||
headSha: '',
|
||||
branchCommits: []
|
||||
};
|
||||
|
@ -278,8 +279,9 @@ function createOrUpdateBranch(git, commitMessage, base, branch, branchRemoteName
|
|||
}
|
||||
// Build the branch commits
|
||||
result.branchCommits = yield buildBranchCommits(git, base, branch);
|
||||
// Get the pull request branch SHA
|
||||
result.headSha = yield git.revParse('HEAD');
|
||||
// Get the base and head SHAs
|
||||
result.baseSha = yield git.revParse(base);
|
||||
result.headSha = yield git.revParse(branch);
|
||||
// Delete the temporary branch
|
||||
yield git.exec(['branch', '--delete', '--force', tempBranch]);
|
||||
// Checkout the working base to leave the local repository as it was found
|
||||
|
@ -458,7 +460,7 @@ function createPullRequest(inputs) {
|
|||
// Stash any uncommitted tracked and untracked changes
|
||||
const stashed = yield git.stashPush(['--include-untracked']);
|
||||
yield git.checkout(inputs.branch);
|
||||
yield githubHelper.pushSignedCommits(result.branchCommits, repoPath, branchRepository, inputs.branch);
|
||||
yield githubHelper.pushSignedCommits(result.branchCommits, result.baseSha, repoPath, branchRepository, inputs.branch);
|
||||
yield git.checkout('-');
|
||||
if (stashed) {
|
||||
yield git.stashPop();
|
||||
|
@ -1274,16 +1276,21 @@ class GitHubHelper {
|
|||
return pull;
|
||||
});
|
||||
}
|
||||
pushSignedCommits(branchCommits, repoPath, branchRepository, branch) {
|
||||
pushSignedCommits(branchCommits, baseSha, repoPath, branchRepository, branch) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let headSha = '';
|
||||
let headSha = baseSha;
|
||||
// testing
|
||||
if (branchCommits.length > 0 && branchCommits[0].parents[0] !== baseSha) {
|
||||
throw new Error(`The base commit ${baseSha} does not match the first commit's parent ${branchCommits[0].parents[0]}`);
|
||||
}
|
||||
for (const commit of branchCommits) {
|
||||
headSha = yield this.createCommit(commit, repoPath, branchRepository);
|
||||
// TODO: The headSha of the previous commit should be passed and used as the parent.
|
||||
headSha = yield this.createCommit(commit, [headSha], repoPath, branchRepository);
|
||||
}
|
||||
yield this.createOrUpdateRef(branchRepository, branch, headSha);
|
||||
});
|
||||
}
|
||||
createCommit(commit, repoPath, branchRepository) {
|
||||
createCommit(commit, parents, repoPath, branchRepository) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const repository = this.parseRepository(branchRepository);
|
||||
let treeSha = commit.tree;
|
||||
|
@ -1304,11 +1311,11 @@ class GitHubHelper {
|
|||
};
|
||||
})));
|
||||
core.info(`Creating tree for local commit ${commit.sha}`);
|
||||
const { data: tree } = yield this.octokit.rest.git.createTree(Object.assign(Object.assign({}, repository), { base_tree: commit.parents[0], tree: treeObjects }));
|
||||
const { data: tree } = yield this.octokit.rest.git.createTree(Object.assign(Object.assign({}, repository), { base_tree: parents[0], tree: treeObjects }));
|
||||
treeSha = tree.sha;
|
||||
core.info(`Created tree ${treeSha} for local commit ${commit.sha}`);
|
||||
}
|
||||
const { data: remoteCommit } = yield this.octokit.rest.git.createCommit(Object.assign(Object.assign({}, repository), { parents: commit.parents, tree: treeSha, message: `${commit.subject}\n\n${commit.body}` }));
|
||||
const { data: remoteCommit } = yield this.octokit.rest.git.createCommit(Object.assign(Object.assign({}, repository), { parents: parents, tree: treeSha, message: `${commit.subject}\n\n${commit.body}` }));
|
||||
core.info(`Created commit ${remoteCommit.sha} for local commit ${commit.sha}`);
|
||||
return remoteCommit.sha;
|
||||
});
|
||||
|
|
|
@ -142,6 +142,7 @@ interface CreateOrUpdateBranchResult {
|
|||
action: string
|
||||
base: string
|
||||
hasDiffWithBase: boolean
|
||||
baseSha: string
|
||||
headSha: string
|
||||
branchCommits: Commit[]
|
||||
}
|
||||
|
@ -173,6 +174,7 @@ export async function createOrUpdateBranch(
|
|||
action: 'none',
|
||||
base: base,
|
||||
hasDiffWithBase: false,
|
||||
baseSha: '',
|
||||
headSha: '',
|
||||
branchCommits: []
|
||||
}
|
||||
|
@ -322,8 +324,9 @@ export async function createOrUpdateBranch(
|
|||
// Build the branch commits
|
||||
result.branchCommits = await buildBranchCommits(git, base, branch)
|
||||
|
||||
// Get the pull request branch SHA
|
||||
result.headSha = await git.revParse('HEAD')
|
||||
// Get the base and head SHAs
|
||||
result.baseSha = await git.revParse(base)
|
||||
result.headSha = await git.revParse(branch)
|
||||
|
||||
// Delete the temporary branch
|
||||
await git.exec(['branch', '--delete', '--force', tempBranch])
|
||||
|
|
|
@ -201,6 +201,7 @@ export async function createPullRequest(inputs: Inputs): Promise<void> {
|
|||
await git.checkout(inputs.branch)
|
||||
await githubHelper.pushSignedCommits(
|
||||
result.branchCommits,
|
||||
result.baseSha,
|
||||
repoPath,
|
||||
branchRepository,
|
||||
inputs.branch
|
||||
|
|
|
@ -195,19 +195,35 @@ export class GitHubHelper {
|
|||
|
||||
async pushSignedCommits(
|
||||
branchCommits: Commit[],
|
||||
baseSha: string,
|
||||
repoPath: string,
|
||||
branchRepository: string,
|
||||
branch: string
|
||||
): Promise<void> {
|
||||
let headSha = ''
|
||||
let headSha = baseSha
|
||||
|
||||
// testing
|
||||
if (branchCommits.length > 0 && branchCommits[0].parents[0] !== baseSha) {
|
||||
throw new Error(
|
||||
`The base commit ${baseSha} does not match the first commit's parent ${branchCommits[0].parents[0]}`
|
||||
)
|
||||
}
|
||||
|
||||
for (const commit of branchCommits) {
|
||||
headSha = await this.createCommit(commit, repoPath, branchRepository)
|
||||
// TODO: The headSha of the previous commit should be passed and used as the parent.
|
||||
headSha = await this.createCommit(
|
||||
commit,
|
||||
[headSha],
|
||||
repoPath,
|
||||
branchRepository
|
||||
)
|
||||
}
|
||||
await this.createOrUpdateRef(branchRepository, branch, headSha)
|
||||
}
|
||||
|
||||
private async createCommit(
|
||||
commit: Commit,
|
||||
parents: string[],
|
||||
repoPath: string,
|
||||
branchRepository: string
|
||||
): Promise<string> {
|
||||
|
@ -238,7 +254,7 @@ export class GitHubHelper {
|
|||
core.info(`Creating tree for local commit ${commit.sha}`)
|
||||
const {data: tree} = await this.octokit.rest.git.createTree({
|
||||
...repository,
|
||||
base_tree: commit.parents[0],
|
||||
base_tree: parents[0],
|
||||
tree: treeObjects
|
||||
})
|
||||
treeSha = tree.sha
|
||||
|
@ -247,7 +263,7 @@ export class GitHubHelper {
|
|||
|
||||
const {data: remoteCommit} = await this.octokit.rest.git.createCommit({
|
||||
...repository,
|
||||
parents: commit.parents,
|
||||
parents: parents,
|
||||
tree: treeSha,
|
||||
message: `${commit.subject}\n\n${commit.body}`
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue