Fix datarace on git.GlobalCommandArgs on tests (#9162)
* fix datarace on git.GlobalCommandArgs on tests * fix tests * fix tests * fix testsrelease/v1.15
parent
9d9e6ac411
commit
7b7d382b8b
|
@ -63,7 +63,6 @@ func createSSHUrl(gitPath string, u *url.URL) *url.URL {
|
||||||
|
|
||||||
func allowLFSFilters() []string {
|
func allowLFSFilters() []string {
|
||||||
// Now here we should explicitly allow lfs filters to run
|
// Now here we should explicitly allow lfs filters to run
|
||||||
globalArgs := git.GlobalCommandArgs
|
|
||||||
filteredLFSGlobalArgs := make([]string, len(git.GlobalCommandArgs))
|
filteredLFSGlobalArgs := make([]string, len(git.GlobalCommandArgs))
|
||||||
j := 0
|
j := 0
|
||||||
for _, arg := range git.GlobalCommandArgs {
|
for _, arg := range git.GlobalCommandArgs {
|
||||||
|
@ -74,9 +73,7 @@ func allowLFSFilters() []string {
|
||||||
j++
|
j++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
filteredLFSGlobalArgs = filteredLFSGlobalArgs[:j]
|
return filteredLFSGlobalArgs[:j]
|
||||||
git.GlobalCommandArgs = filteredLFSGlobalArgs
|
|
||||||
return globalArgs
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func onGiteaRun(t *testing.T, callback func(*testing.T, *url.URL), prepare ...bool) {
|
func onGiteaRun(t *testing.T, callback func(*testing.T, *url.URL), prepare ...bool) {
|
||||||
|
@ -107,9 +104,7 @@ func onGiteaRun(t *testing.T, callback func(*testing.T, *url.URL), prepare ...bo
|
||||||
|
|
||||||
func doGitClone(dstLocalPath string, u *url.URL) func(*testing.T) {
|
func doGitClone(dstLocalPath string, u *url.URL) func(*testing.T) {
|
||||||
return func(t *testing.T) {
|
return func(t *testing.T) {
|
||||||
oldGlobals := allowLFSFilters()
|
assert.NoError(t, git.CloneWithArgs(u.String(), dstLocalPath, allowLFSFilters(), git.CloneRepoOptions{}))
|
||||||
assert.NoError(t, git.Clone(u.String(), dstLocalPath, git.CloneRepoOptions{}))
|
|
||||||
git.GlobalCommandArgs = oldGlobals
|
|
||||||
assert.True(t, com.IsExist(filepath.Join(dstLocalPath, "README.md")))
|
assert.True(t, com.IsExist(filepath.Join(dstLocalPath, "README.md")))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -170,9 +165,7 @@ func doGitCreateBranch(dstPath, branch string) func(*testing.T) {
|
||||||
|
|
||||||
func doGitCheckoutBranch(dstPath string, args ...string) func(*testing.T) {
|
func doGitCheckoutBranch(dstPath string, args ...string) func(*testing.T) {
|
||||||
return func(t *testing.T) {
|
return func(t *testing.T) {
|
||||||
oldGlobals := allowLFSFilters()
|
_, err := git.NewCommandNoGlobals(append(append(allowLFSFilters(), "checkout"), args...)...).RunInDir(dstPath)
|
||||||
_, err := git.NewCommand(append([]string{"checkout"}, args...)...).RunInDir(dstPath)
|
|
||||||
git.GlobalCommandArgs = oldGlobals
|
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -186,9 +179,7 @@ func doGitMerge(dstPath string, args ...string) func(*testing.T) {
|
||||||
|
|
||||||
func doGitPull(dstPath string, args ...string) func(*testing.T) {
|
func doGitPull(dstPath string, args ...string) func(*testing.T) {
|
||||||
return func(t *testing.T) {
|
return func(t *testing.T) {
|
||||||
oldGlobals := allowLFSFilters()
|
_, err := git.NewCommandNoGlobals(append(append(allowLFSFilters(), "pull"), args...)...).RunInDir(dstPath)
|
||||||
_, err := git.NewCommand(append([]string{"pull"}, args...)...).RunInDir(dstPath)
|
|
||||||
git.GlobalCommandArgs = oldGlobals
|
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,8 +148,8 @@ func lfsCommitAndPushTest(t *testing.T, dstPath string) (littleLFS, bigLFS strin
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
err = git.AddChanges(dstPath, false, ".gitattributes")
|
err = git.AddChanges(dstPath, false, ".gitattributes")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
oldGlobals := allowLFSFilters()
|
|
||||||
err = git.CommitChanges(dstPath, git.CommitChangesOptions{
|
err = git.CommitChangesWithArgs(dstPath, allowLFSFilters(), git.CommitChangesOptions{
|
||||||
Committer: &git.Signature{
|
Committer: &git.Signature{
|
||||||
Email: "user2@example.com",
|
Email: "user2@example.com",
|
||||||
Name: "User Two",
|
Name: "User Two",
|
||||||
|
@ -163,7 +163,6 @@ func lfsCommitAndPushTest(t *testing.T, dstPath string) (littleLFS, bigLFS strin
|
||||||
Message: fmt.Sprintf("Testing commit @ %v", time.Now()),
|
Message: fmt.Sprintf("Testing commit @ %v", time.Now()),
|
||||||
})
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
git.GlobalCommandArgs = oldGlobals
|
|
||||||
|
|
||||||
littleLFS, bigLFS = commitAndPushTest(t, dstPath, prefix)
|
littleLFS, bigLFS = commitAndPushTest(t, dstPath, prefix)
|
||||||
|
|
||||||
|
@ -307,12 +306,12 @@ func generateCommitWithNewData(size int, repoPath, email, fullName, prefix strin
|
||||||
|
|
||||||
//Commit
|
//Commit
|
||||||
// Now here we should explicitly allow lfs filters to run
|
// Now here we should explicitly allow lfs filters to run
|
||||||
oldGlobals := allowLFSFilters()
|
globalArgs := allowLFSFilters()
|
||||||
err = git.AddChanges(repoPath, false, filepath.Base(tmpFile.Name()))
|
err = git.AddChangesWithArgs(repoPath, globalArgs, false, filepath.Base(tmpFile.Name()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
err = git.CommitChanges(repoPath, git.CommitChangesOptions{
|
err = git.CommitChangesWithArgs(repoPath, globalArgs, git.CommitChangesOptions{
|
||||||
Committer: &git.Signature{
|
Committer: &git.Signature{
|
||||||
Email: email,
|
Email: email,
|
||||||
Name: fullName,
|
Name: fullName,
|
||||||
|
@ -325,7 +324,6 @@ func generateCommitWithNewData(size int, repoPath, email, fullName, prefix strin
|
||||||
},
|
},
|
||||||
Message: fmt.Sprintf("Testing commit @ %v", time.Now()),
|
Message: fmt.Sprintf("Testing commit @ %v", time.Now()),
|
||||||
})
|
})
|
||||||
git.GlobalCommandArgs = oldGlobals
|
|
||||||
return filepath.Base(tmpFile.Name()), err
|
return filepath.Base(tmpFile.Name()), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,14 @@ func NewCommand(args ...string) *Command {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewCommandNoGlobals creates and returns a new Git Command based on given command and arguments only with the specify args and don't care global command args
|
||||||
|
func NewCommandNoGlobals(args ...string) *Command {
|
||||||
|
return &Command{
|
||||||
|
name: GitExecutable,
|
||||||
|
args: args,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// AddArguments adds new argument(s) to the command.
|
// AddArguments adds new argument(s) to the command.
|
||||||
func (c *Command) AddArguments(args ...string) *Command {
|
func (c *Command) AddArguments(args ...string) *Command {
|
||||||
c.args = append(c.args, args...)
|
c.args = append(c.args, args...)
|
||||||
|
|
|
@ -207,7 +207,12 @@ func (c *Commit) GetCommitByPath(relpath string) (*Commit, error) {
|
||||||
|
|
||||||
// AddChanges marks local changes to be ready for commit.
|
// AddChanges marks local changes to be ready for commit.
|
||||||
func AddChanges(repoPath string, all bool, files ...string) error {
|
func AddChanges(repoPath string, all bool, files ...string) error {
|
||||||
cmd := NewCommand("add")
|
return AddChangesWithArgs(repoPath, GlobalCommandArgs, all, files...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddChangesWithArgs marks local changes to be ready for commit.
|
||||||
|
func AddChangesWithArgs(repoPath string, gloablArgs []string, all bool, files ...string) error {
|
||||||
|
cmd := NewCommandNoGlobals(append(gloablArgs, "add")...)
|
||||||
if all {
|
if all {
|
||||||
cmd.AddArguments("--all")
|
cmd.AddArguments("--all")
|
||||||
}
|
}
|
||||||
|
@ -226,7 +231,15 @@ type CommitChangesOptions struct {
|
||||||
// CommitChanges commits local changes with given committer, author and message.
|
// CommitChanges commits local changes with given committer, author and message.
|
||||||
// If author is nil, it will be the same as committer.
|
// If author is nil, it will be the same as committer.
|
||||||
func CommitChanges(repoPath string, opts CommitChangesOptions) error {
|
func CommitChanges(repoPath string, opts CommitChangesOptions) error {
|
||||||
cmd := NewCommand()
|
cargs := make([]string, len(GlobalCommandArgs))
|
||||||
|
copy(cargs, GlobalCommandArgs)
|
||||||
|
return CommitChangesWithArgs(repoPath, cargs, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CommitChangesWithArgs commits local changes with given committer, author and message.
|
||||||
|
// If author is nil, it will be the same as committer.
|
||||||
|
func CommitChangesWithArgs(repoPath string, args []string, opts CommitChangesOptions) error {
|
||||||
|
cmd := NewCommandNoGlobals(args...)
|
||||||
if opts.Committer != nil {
|
if opts.Committer != nil {
|
||||||
cmd.AddArguments("-c", "user.name="+opts.Committer.Name, "-c", "user.email="+opts.Committer.Email)
|
cmd.AddArguments("-c", "user.name="+opts.Committer.Name, "-c", "user.email="+opts.Committer.Email)
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,12 +165,19 @@ type CloneRepoOptions struct {
|
||||||
|
|
||||||
// Clone clones original repository to target path.
|
// Clone clones original repository to target path.
|
||||||
func Clone(from, to string, opts CloneRepoOptions) (err error) {
|
func Clone(from, to string, opts CloneRepoOptions) (err error) {
|
||||||
|
cargs := make([]string, len(GlobalCommandArgs))
|
||||||
|
copy(cargs, GlobalCommandArgs)
|
||||||
|
return CloneWithArgs(from, to, cargs, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CloneWithArgs original repository to target path.
|
||||||
|
func CloneWithArgs(from, to string, args []string, opts CloneRepoOptions) (err error) {
|
||||||
toDir := path.Dir(to)
|
toDir := path.Dir(to)
|
||||||
if err = os.MkdirAll(toDir, os.ModePerm); err != nil {
|
if err = os.MkdirAll(toDir, os.ModePerm); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := NewCommand("clone")
|
cmd := NewCommandNoGlobals(args...).AddArguments("clone")
|
||||||
if opts.Mirror {
|
if opts.Mirror {
|
||||||
cmd.AddArguments("--mirror")
|
cmd.AddArguments("--mirror")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue