From 5ede64a7e7c69bf8913bcfb1d4f9c3b29aa99c64 Mon Sep 17 00:00:00 2001 From: Kamil Pajdzik <41709775+kpajdzik@users.noreply.github.com> Date: Fri, 9 Nov 2018 11:00:19 -0800 Subject: [PATCH] Add MergeOptions to regenerate scenario (#459) --- .scripts/git.ts | 20 +++++++++++--------- .scripts/gulp.ts | 8 ++++++-- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/.scripts/git.ts b/.scripts/git.ts index d06be1615c31..6c0cc46e9819 100644 --- a/.scripts/git.ts +++ b/.scripts/git.ts @@ -4,7 +4,7 @@ * license information. */ -import { Cred, Index, Merge, Oid, Reference, Repository, Reset, Signature, StatusFile } from "nodegit"; +import { Cred, Index, Merge, Oid, Reference, Repository, Reset, Signature, StatusFile, Branch as NodeBranch, MergeOptions } from "nodegit"; import { Logger } from "./logger"; export type ValidateFunction = (statuses: StatusFile[]) => boolean; @@ -141,27 +141,27 @@ export async function getValidatedRepository(repositoryPath: string): Promise { +export async function mergeBranch(repository: Repository, toBranch: Branch, fromBranch: Branch, mergeOptions?: MergeOptions): Promise { _logger.logTrace(`Merging "${fromBranch.fullName()}" to "${toBranch.fullName()}" branch in ${repository.path()} repository`); try { - return repository.mergeBranches(toBranch.name, fromBranch.shorthand(), Signature.default(repository), Merge.PREFERENCE.NONE); + return repository.mergeBranches(toBranch.name, fromBranch.shorthand(), Signature.default(repository), Merge.PREFERENCE.NONE, mergeOptions); } catch (error) { throw new Error(`Probable merge conflicts. Error: ${error}`); } } -export async function mergeMasterIntoBranch(repository: Repository, toBranch: Branch): Promise { - return mergeBranch(repository, toBranch, Branch.RemoteMaster); +export async function mergeMasterIntoBranch(repository: Repository, toBranch: Branch, mergeOptions?: MergeOptions): Promise { + return mergeBranch(repository, toBranch, Branch.RemoteMaster, mergeOptions); } -export async function pullBranch(repository: Repository, localBranch: Branch): Promise { +export async function pullBranch(repository: Repository, localBranch: Branch, mergeOptions?: MergeOptions): Promise { _logger.logTrace(`Pulling "${localBranch.fullName()}" branch in ${repository.path()} repository`); await repository.fetchAll(); _logger.logTrace(`Fetched all successfully`); const remoteBranch = new Branch(localBranch.name, BranchLocation.Remote, localBranch.remote); - await mergeBranch(repository, localBranch, remoteBranch); + await mergeBranch(repository, localBranch, remoteBranch, mergeOptions); const index = await repository.index(); if (index.hasConflicts()) { @@ -202,10 +202,11 @@ export async function checkoutRemoteBranch(repository: Repository, remoteBranch: if (branchExists) { branchRef = await checkoutBranch(repository, remoteBranch.name); } else { - branchRef = await createNewBranch(repository, remoteBranch.name, true); + branchRef = await createNewBranch(repository, remoteBranch.name); + await NodeBranch.setUpstream(branchRef, remoteBranch.shorthand()); const commit = await repository.getReferenceCommit(remoteBranch.name); + await checkoutBranch(repository, branchRef); await Reset.reset(repository, commit as any, Reset.TYPE.HARD, {}); - await pullBranch(repository, remoteBranch.toLocal()); } return branchRef; @@ -239,6 +240,7 @@ export async function checkoutMaster(repository: Repository): Promise } export async function refreshRepository(repository: Repository) { + await repository.fetchAll(); await pullMaster(repository); return checkoutMaster(repository); } diff --git a/.scripts/gulp.ts b/.scripts/gulp.ts index 7f11e035e7f7..d5f2a26940ce 100644 --- a/.scripts/gulp.ts +++ b/.scripts/gulp.ts @@ -10,12 +10,13 @@ import fs from "fs"; import * as path from "path"; import { SdkType } from "./commandLine"; import { contains, npmInstall } from "./common"; -import { Branch, BranchLocation, checkoutRemoteBranch, commitAndPush, getValidatedRepository, mergeMasterIntoBranch, refreshRepository, unlockGitRepository, ValidateFunction, waitAndLockGitRepository } from "./git"; +import { Branch, BranchLocation, checkoutRemoteBranch, commitAndPush, getValidatedRepository, mergeMasterIntoBranch, refreshRepository, unlockGitRepository, ValidateFunction, waitAndLockGitRepository, checkoutBranch } from "./git"; import { commitAndCreatePullRequest, findPullRequest, forcePrDiffRefresh, requestPullRequestReview } from "./github"; import { Logger } from "./logger"; import { findMissingSdks, findSdkDirectory, saveContentToFile } from "./packages"; import { copyExistingNodeJsReadme, findReadmeTypeScriptMdFilePaths, getAbsolutePackageFolderPathFromReadmeFileContents, getPackageNamesFromReadmeTypeScriptMdFileContents, getSinglePackageName, updateMainReadmeFile, updateTypeScriptReadmeFile } from "./readme"; import { Version } from "./version"; +import { Merge } from 'nodegit'; const _logger = Logger.get(); @@ -182,6 +183,7 @@ export async function generateAllMissingSdks(azureSdkForJsRepoPath: string, azur export async function regenerate(branchName: string, packageName: string, azureSdkForJsRepoPath: string, azureRestAPISpecsPath: string, pullRequestId: number, skipVersionBump?: boolean, requestReview?: boolean) { const azureSdkForJsRepository = await getValidatedRepository(azureSdkForJsRepoPath); + const currentBranch = await azureSdkForJsRepository.getCurrentBranch(); await refreshRepository(azureSdkForJsRepository); _logger.log(`Refreshed ${azureSdkForJsRepository.path()} repository successfully`); @@ -190,7 +192,7 @@ export async function regenerate(branchName: string, packageName: string, azureS _logger.log(`Checked out ${branchName} branch`); const localBranch = remoteBranch.convertTo(BranchLocation.Local); - await mergeMasterIntoBranch(azureSdkForJsRepository, localBranch); + await mergeMasterIntoBranch(azureSdkForJsRepository, localBranch, { fileFavor: Merge.FILE_FAVOR.THEIRS }); _logger.log(`Merged master into ${localBranch.shorthand()} successfully`); if (skipVersionBump) { @@ -225,6 +227,8 @@ export async function regenerate(branchName: string, packageName: string, azureS } else { _logger.log("Skipping review requesting"); } + + await checkoutBranch(azureSdkForJsRepository, currentBranch); } async function bumpMinorVersion(azureSdkForJsRepoPath: string, packageName: string) {