Skip to content

Conversation

martinscholz83
Copy link
Contributor

Change all cmd...Pipeline commands from to cmd.RunWithContext.
#18553

@6543 6543 self-requested a review February 9, 2022 20:50
@6543 6543 added this to the 1.17.0 milestone Feb 9, 2022
@6543 6543 added the type/refactoring Existing code has been cleaned up. There should be no new functionality. label Feb 9, 2022
@6543
Copy link
Member

6543 commented Feb 9, 2022

Can you also delete tje ...pipeline... functions?

@GiteaBot GiteaBot added the lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. label Feb 9, 2022
@martinscholz83
Copy link
Contributor Author

You mean the PipelineFunc member of the RunContext struct?

@GiteaBot GiteaBot added lgtm/need 1 This PR needs approval from one additional maintainer to be merged. and removed lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. labels Feb 9, 2022
@lunny
Copy link
Member

lunny commented Feb 10, 2022

Maybe you need add Timeout: -1 for those changes.

@martinscholz83
Copy link
Contributor Author

👍 Wasn't sure about the Timeout. Just saw now that these pipeline functions have different overloads to set Timeout to -1. @6543, you mean deleting the Pipeline methods for the command struct like func (c *Command) RunInDirTimeoutEnvFullPipeline, right?

@codecov-commenter
Copy link

codecov-commenter commented Feb 10, 2022

Codecov Report

❗ No coverage uploaded for pull request base (main@7489d96). Click here to learn what that means.
The diff coverage is 75.38%.

Impacted file tree graph

@@           Coverage Diff           @@
##             main   #18693   +/-   ##
=======================================
  Coverage        ?   46.47%           
=======================================
  Files           ?      851           
  Lines           ?   122000           
  Branches        ?        0           
=======================================
  Hits            ?    56700           
  Misses          ?    58417           
  Partials        ?     6883           
Impacted Files Coverage Δ
modules/git/pipeline/revlist.go 50.00% <41.66%> (ø)
modules/gitgraph/graph.go 58.76% <53.33%> (ø)
modules/git/pipeline/catfile.go 75.36% <84.61%> (ø)
services/pull/merge.go 47.83% <92.30%> (ø)
modules/git/repo_attribute.go 70.60% <94.44%> (ø)
modules/git/repo.go 65.74% <100.00%> (ø)
modules/git/repo_index.go 53.33% <100.00%> (ø)
modules/git/repo_object.go 64.70% <100.00%> (ø)
modules/git/repo_tree.go 80.43% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7489d96...42e9a1b. Read the comment docs.

@GiteaBot GiteaBot added lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. and removed lgtm/need 1 This PR needs approval from one additional maintainer to be merged. labels Feb 10, 2022
@zeripath
Copy link
Contributor

zeripath commented Feb 10, 2022

Timeout is less of a problem now that the process go context is passed down to the git command.

TBH we should probably be moving the go context into the RunContext e.g.

// RunContext represents parameters to run the command
type RunContext struct {
        context.Context
	Env            []string
	Timeout        time.Duration
	Dir            string
	Stdout, Stderr io.Writer
	Stdin          io.Reader
	PipelineFunc   func(context.Context, context.CancelFunc) error
}

and dropping the parent context stuff from the Command.

@6543
Copy link
Member

6543 commented Feb 10, 2022

👍 Wasn't sure about the Timeout. Just saw now that these pipeline functions have different overloads to set Timeout to -1. @6543, you mean deleting the Pipeline methods for the command struct like func (c *Command) RunInDirTimeoutEnvFullPipeline, right?

Yes

@martinscholz83
Copy link
Contributor Author

I think i missed some places like this

@lunny
Copy link
Member

lunny commented Feb 10, 2022

I think i missed some places like this

How about to delete the method RunInDirPipeline if all of it have been replaced?

@martinscholz83
Copy link
Contributor Author

While deleting the RunInDirPipeline I realized that these RunInDir also need to replaced with RunWithContext. Is this correct? Like here. So the only method commandshould implement is RunWithContext?

@6543
Copy link
Member

6543 commented Feb 10, 2022

yes there are different RunInXY ... func that all can be replaced

@lunny
Copy link
Member

lunny commented Feb 10, 2022

While deleting the RunInDirPipeline I realized that these RunInDir also need to replaced with RunWithContext. Is this correct? Like here. So the only method commandshould implement is RunWithContext?

Right! There are also another x methods need to be replaced. That's why I just introduced the RunWithContext but not replace them in one PR.

@lunny
Copy link
Member

lunny commented Feb 10, 2022

I also have a related PR #18147 to do related things.

@martinscholz83
Copy link
Contributor Author

The thing is, if your looking at command.go. All these overloads ending up in RunInDirTimeoutEnvFullPipelineFunc. So I can not clean up these RunInDirPipeline methods without replacing in all places in the src code with RunWithContext.

@6543
Copy link
Member

6543 commented Feb 10, 2022

☝️ that's what has to be done :)

... replacing in all places in the src code with RunWithContext ...

as mentioned it's not hard to do or understand, just a huge refactor in terms of touched lines of code

@martinscholz83
Copy link
Contributor Author

That's why I just introduced the RunWithContext but not replace them in one PR.

I think i understood this wrong 😄. Thought you will do this. So i will replace everything and the clean up command.go.

@6543
Copy link
Member

6543 commented Feb 10, 2022

☝️ that would be awesome

@lunny
Copy link
Member

lunny commented Feb 11, 2022

I think we can refactor them step by step. This PR is enough. Let's merge it at first.

@6543
Copy link
Member

6543 commented Feb 11, 2022

@martinscholz83 thanks for the work, i only found one thing ☝️ and after it its good to go :)

@6543
Copy link
Member

6543 commented Feb 11, 2022

thanks

@6543 6543 merged commit 26718a7 into go-gitea:main Feb 11, 2022
@6543
Copy link
Member

6543 commented Feb 11, 2022

hope you enjoined contributing 👍

@martinscholz83
Copy link
Contributor Author

🎉 Definitely! Thx for your help! To replace the rest of the RunInDir functions I started to work on.

		_, err := git.NewCommand(git.DefaultContext, "read-tree", "--empty").RunInDir(path)

These I got easily replaced with a regex script to

		err := git.NewCommand(git.DefaultContext, "read-tree", "--empty").RunWithContext(&RunContext{Dir: path, Timeout: -1,})

and then maybe check if RunContext can be resolved or if it has to be git.RunContext. But a lot of calls use the returned string (stdout) from RunInDir for later usage. So for example this

treeSha, err := git.NewCommand(git.DefaultContext, "write-tree").RunInDir(path)
treeSha = strings.TrimSpace(treeSha)

has to become this for example

stdout := new(bytes.Buffer)
err := git.NewCommand(git.DefaultContext, "write-tree").RunWithContext(&RunContext{Dir: path, Timeout: -1, Stdout: &stdout})
treeSha = strings.TrimSpace(stdout.String())
...

Is this what you have in mind?

@6543
Copy link
Member

6543 commented Feb 11, 2022

☝️ yes 👍

zjjhot added a commit to zjjhot/gitea that referenced this pull request Feb 12, 2022
* giteaofficial/main:
  Send mail to issue/pr assignee/reviewer also when OnMention is set (go-gitea#18707)
  Reduce CI go module downloads, add make targets (go-gitea#18708)
  Add number in queue status to monitor page (go-gitea#18712)
  Fix source code line highlighting (go-gitea#18729)
  Fix forked repositories missed tags (go-gitea#18719)
  [skip ci] Updated translations via Crowdin
  Fix release typo (go-gitea#18728)
  Display template path of current page in dev mode (go-gitea#18717)
  Separate the details links of commit-statuses in headers (go-gitea#18661)
  Add LDAP group sync to Teams, fixes go-gitea#1395 (go-gitea#16299)
  Change git.cmd to RunWithContext (go-gitea#18693)
Chianina pushed a commit to Chianina/gitea that referenced this pull request Mar 28, 2022
Change all `cmd...Pipeline` commands to `cmd.RunWithContext`.

go-gitea#18553

Co-authored-by: Martin Scholz <[email protected]>
@go-gitea go-gitea locked and limited conversation to collaborators Apr 28, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. type/refactoring Existing code has been cleaned up. There should be no new functionality.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants