-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix
GetCommitBranchStart
bug (#33298)
- Loading branch information
Showing
3 changed files
with
49 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -80,6 +80,7 @@ func testGitGeneral(t *testing.T, u *url.URL) { | |
mediaTest(t, &httpContext, pushedFilesStandard[0], pushedFilesStandard[1], pushedFilesLFS[0], pushedFilesLFS[1]) | ||
|
||
t.Run("CreateAgitFlowPull", doCreateAgitFlowPull(dstPath, &httpContext, "test/head")) | ||
t.Run("CreateProtectedBranch", doCreateProtectedBranch(&httpContext, dstPath)) | ||
t.Run("BranchProtectMerge", doBranchProtectPRMerge(&httpContext, dstPath)) | ||
t.Run("AutoMerge", doAutoPRMerge(&httpContext, dstPath)) | ||
t.Run("CreatePRAndSetManuallyMerged", doCreatePRAndSetManuallyMerged(httpContext, httpContext, dstPath, "master", "test-manually-merge")) | ||
|
@@ -121,6 +122,7 @@ func testGitGeneral(t *testing.T, u *url.URL) { | |
mediaTest(t, &sshContext, pushedFilesStandard[0], pushedFilesStandard[1], pushedFilesLFS[0], pushedFilesLFS[1]) | ||
|
||
t.Run("CreateAgitFlowPull", doCreateAgitFlowPull(dstPath, &sshContext, "test/head2")) | ||
t.Run("CreateProtectedBranch", doCreateProtectedBranch(&sshContext, dstPath)) | ||
t.Run("BranchProtectMerge", doBranchProtectPRMerge(&sshContext, dstPath)) | ||
t.Run("MergeFork", func(t *testing.T) { | ||
defer tests.PrintCurrentTest(t)() | ||
|
@@ -325,6 +327,34 @@ func generateCommitWithNewData(size int, repoPath, email, fullName, prefix strin | |
return filepath.Base(tmpFile.Name()), err | ||
} | ||
|
||
func doCreateProtectedBranch(baseCtx *APITestContext, dstPath string) func(t *testing.T) { | ||
return func(t *testing.T) { | ||
defer tests.PrintCurrentTest(t)() | ||
ctx := NewAPITestContext(t, baseCtx.Username, baseCtx.Reponame, auth_model.AccessTokenScopeWriteRepository) | ||
|
||
t.Run("ProtectBranchWithFilePatterns", doProtectBranch(ctx, "release-*", baseCtx.Username, "", "", "config*")) | ||
|
||
// push a new branch without any new commits | ||
t.Run("CreateProtectedBranch-NoChanges", doGitCreateBranch(dstPath, "release-v1.0")) | ||
t.Run("PushProtectedBranch-NoChanges", doGitPushTestRepository(dstPath, "origin", "release-v1.0")) | ||
t.Run("CheckoutMaster-NoChanges", doGitCheckoutBranch(dstPath, "master")) | ||
|
||
// push a new branch with a new unprotected file | ||
t.Run("CreateProtectedBranch-UnprotectedFile", doGitCreateBranch(dstPath, "release-v2.0")) | ||
_, err := generateCommitWithNewData(testFileSizeSmall, dstPath, "[email protected]", "User Two", "abc.txt") | ||
assert.NoError(t, err) | ||
t.Run("PushProtectedBranch-UnprotectedFile", doGitPushTestRepository(dstPath, "origin", "release-v2.0")) | ||
t.Run("CheckoutMaster-UnprotectedFile", doGitCheckoutBranch(dstPath, "master")) | ||
|
||
// push a new branch with a new protected file | ||
t.Run("CreateProtectedBranch-ProtectedFile", doGitCreateBranch(dstPath, "release-v3.0")) | ||
_, err = generateCommitWithNewData(testFileSizeSmall, dstPath, "[email protected]", "User Two", "config") | ||
assert.NoError(t, err) | ||
t.Run("PushProtectedBranch-ProtectedFile", doGitPushTestRepositoryFail(dstPath, "origin", "release-v3.0")) | ||
t.Run("CheckoutMaster-ProtectedFile", doGitCheckoutBranch(dstPath, "master")) | ||
} | ||
} | ||
|
||
func doBranchProtectPRMerge(baseCtx *APITestContext, dstPath string) func(t *testing.T) { | ||
return func(t *testing.T) { | ||
defer tests.PrintCurrentTest(t)() | ||
|
@@ -334,27 +364,23 @@ func doBranchProtectPRMerge(baseCtx *APITestContext, dstPath string) func(t *tes | |
ctx := NewAPITestContext(t, baseCtx.Username, baseCtx.Reponame, auth_model.AccessTokenScopeWriteRepository) | ||
|
||
// Protect branch without any whitelisting | ||
t.Run("ProtectBranchNoWhitelist", func(t *testing.T) { | ||
doProtectBranch(ctx, "protected", "", "", "") | ||
}) | ||
t.Run("ProtectBranchNoWhitelist", doProtectBranch(ctx, "protected", "", "", "", "")) | ||
|
||
// Try to push without permissions, which should fail | ||
t.Run("TryPushWithoutPermissions", func(t *testing.T) { | ||
_, err := generateCommitWithNewData(testFileSizeSmall, dstPath, "[email protected]", "User Two", "branch-data-file-") | ||
assert.NoError(t, err) | ||
doGitPushTestRepositoryFail(dstPath, "origin", "protected") | ||
doGitPushTestRepositoryFail(dstPath, "origin", "protected")(t) | ||
}) | ||
|
||
// Set up permissions for normal push but not force push | ||
t.Run("SetupNormalPushPermissions", func(t *testing.T) { | ||
doProtectBranch(ctx, "protected", baseCtx.Username, "", "") | ||
}) | ||
t.Run("SetupNormalPushPermissions", doProtectBranch(ctx, "protected", baseCtx.Username, "", "", "")) | ||
|
||
// Normal push should work | ||
t.Run("NormalPushWithPermissions", func(t *testing.T) { | ||
_, err := generateCommitWithNewData(testFileSizeSmall, dstPath, "[email protected]", "User Two", "branch-data-file-") | ||
assert.NoError(t, err) | ||
doGitPushTestRepository(dstPath, "origin", "protected") | ||
doGitPushTestRepository(dstPath, "origin", "protected")(t) | ||
}) | ||
|
||
// Try to force push without force push permissions, which should fail | ||
|
@@ -364,30 +390,22 @@ func doBranchProtectPRMerge(baseCtx *APITestContext, dstPath string) func(t *tes | |
_, err := generateCommitWithNewData(testFileSizeSmall, dstPath, "[email protected]", "User Two", "branch-data-file-new") | ||
assert.NoError(t, err) | ||
}) | ||
doGitPushTestRepositoryFail(dstPath, "-f", "origin", "protected") | ||
doGitPushTestRepositoryFail(dstPath, "-f", "origin", "protected")(t) | ||
}) | ||
|
||
// Set up permissions for force push but not normal push | ||
t.Run("SetupForcePushPermissions", func(t *testing.T) { | ||
doProtectBranch(ctx, "protected", "", baseCtx.Username, "") | ||
}) | ||
t.Run("SetupForcePushPermissions", doProtectBranch(ctx, "protected", "", baseCtx.Username, "", "")) | ||
|
||
// Try to force push without normal push permissions, which should fail | ||
t.Run("ForcePushWithoutNormalPermissions", func(t *testing.T) { | ||
doGitPushTestRepositoryFail(dstPath, "-f", "origin", "protected") | ||
}) | ||
t.Run("ForcePushWithoutNormalPermissions", doGitPushTestRepositoryFail(dstPath, "-f", "origin", "protected")) | ||
|
||
// Set up permissions for normal and force push (both are required to force push) | ||
t.Run("SetupNormalAndForcePushPermissions", func(t *testing.T) { | ||
doProtectBranch(ctx, "protected", baseCtx.Username, baseCtx.Username, "") | ||
}) | ||
t.Run("SetupNormalAndForcePushPermissions", doProtectBranch(ctx, "protected", baseCtx.Username, baseCtx.Username, "", "")) | ||
|
||
// Force push should now work | ||
t.Run("ForcePushWithPermissions", func(t *testing.T) { | ||
doGitPushTestRepository(dstPath, "-f", "origin", "protected") | ||
}) | ||
t.Run("ForcePushWithPermissions", doGitPushTestRepository(dstPath, "-f", "origin", "protected")) | ||
|
||
t.Run("ProtectProtectedBranchNoWhitelist", doProtectBranch(ctx, "protected", "", "", "")) | ||
t.Run("ProtectProtectedBranchNoWhitelist", doProtectBranch(ctx, "protected", "", "", "", "")) | ||
t.Run("PushToUnprotectedBranch", doGitPushTestRepository(dstPath, "origin", "protected:unprotected")) | ||
var pr api.PullRequest | ||
var err error | ||
|
@@ -409,14 +427,14 @@ func doBranchProtectPRMerge(baseCtx *APITestContext, dstPath string) func(t *tes | |
t.Run("MergePR", doAPIMergePullRequest(ctx, baseCtx.Username, baseCtx.Reponame, pr.Index)) | ||
t.Run("PullProtected", doGitPull(dstPath, "origin", "protected")) | ||
|
||
t.Run("ProtectProtectedBranchUnprotectedFilePaths", doProtectBranch(ctx, "protected", "", "", "unprotected-file-*")) | ||
t.Run("ProtectProtectedBranchUnprotectedFilePaths", doProtectBranch(ctx, "protected", "", "", "unprotected-file-*", "")) | ||
t.Run("GenerateCommit", func(t *testing.T) { | ||
_, err := generateCommitWithNewData(testFileSizeSmall, dstPath, "[email protected]", "User Two", "unprotected-file-") | ||
assert.NoError(t, err) | ||
}) | ||
t.Run("PushUnprotectedFilesToProtectedBranch", doGitPushTestRepository(dstPath, "origin", "protected")) | ||
|
||
t.Run("ProtectProtectedBranchWhitelist", doProtectBranch(ctx, "protected", baseCtx.Username, "", "")) | ||
t.Run("ProtectProtectedBranchWhitelist", doProtectBranch(ctx, "protected", baseCtx.Username, "", "", "")) | ||
|
||
t.Run("CheckoutMaster", doGitCheckoutBranch(dstPath, "master")) | ||
t.Run("CreateBranchForced", doGitCreateBranch(dstPath, "toforce")) | ||
|
@@ -431,7 +449,7 @@ func doBranchProtectPRMerge(baseCtx *APITestContext, dstPath string) func(t *tes | |
} | ||
} | ||
|
||
func doProtectBranch(ctx APITestContext, branch, userToWhitelistPush, userToWhitelistForcePush, unprotectedFilePatterns string) func(t *testing.T) { | ||
func doProtectBranch(ctx APITestContext, branch, userToWhitelistPush, userToWhitelistForcePush, unprotectedFilePatterns, protectedFilePatterns string) func(t *testing.T) { | ||
// We are going to just use the owner to set the protection. | ||
return func(t *testing.T) { | ||
csrf := GetUserCSRFToken(t, ctx.Session) | ||
|
@@ -440,6 +458,7 @@ func doProtectBranch(ctx APITestContext, branch, userToWhitelistPush, userToWhit | |
"_csrf": csrf, | ||
"rule_name": branch, | ||
"unprotected_file_patterns": unprotectedFilePatterns, | ||
"protected_file_patterns": protectedFilePatterns, | ||
} | ||
|
||
if userToWhitelistPush != "" { | ||
|