diff options
author | zeripath <art27@cantab.net> | 2019-05-11 16:29:17 +0100 |
---|---|---|
committer | techknowlogick <hello@techknowlogick.com> | 2019-05-11 11:29:17 -0400 |
commit | ce8de3533485eed0c56059d6334a5031a73eed67 (patch) | |
tree | 2f8e5c84441467269a98fb450ddfaca236cfc2e7 /modules/git/command.go | |
parent | 34eee25bd42d19287e3e33afd169cc979ab61f37 (diff) | |
download | gitea-ce8de3533485eed0c56059d6334a5031a73eed67.tar.gz gitea-ce8de3533485eed0c56059d6334a5031a73eed67.zip |
Remove local clones & make hooks run on merge/edit/upload (#6672)
* Add options to git.Clone to make it more capable
* Begin the process of removing the local copy and tidy up
* Remove Wiki LocalCopy Checkouts
* Remove the last LocalRepo helpers
* Remove WithTemporaryFile
* Enable push-hooks for these routes
* Ensure tests cope with hooks
Signed-off-by: Andrew Thornton <art27@cantab.net>
* Remove Repository.LocalCopyPath()
* Move temporary repo to use the standard temporary path
* Fix the tests
Signed-off-by: Andrew Thornton <art27@cantab.net>
* Remove LocalWikiPath
* Fix missing remove
Signed-off-by: Andrew Thornton <art27@cantab.net>
* Use AppURL for Oauth user link (#6894)
* Use AppURL for Oauth user link
Fix #6843
* Update oauth.go
* Update oauth.go
* internal/ssh: ignore env command totally (#6825)
* ssh: ignore env command totally
* Remove commented code
Needed fix described in issue #6889
* Escape the commit message on issues update and title in telegram hook (#6901)
* update sdk to latest (#6903)
* improve description of branch protection (fix #6886) (#6906)
The branch protection description text were not quite accurate.
* Fix logging documentation (#6904)
* ENABLE_MACARON_REDIRECT should be REDIRECT_MACARON_LOG
* Allow DISABLE_ROUTER_LOG to be set in the [log] section
* [skip ci] Updated translations via Crowdin
* Move sdk structs to modules/structs (#6905)
* move sdk structs to moduels/structs
* fix tests
* fix fmt
* fix swagger
* fix vendor
Diffstat (limited to 'modules/git/command.go')
-rw-r--r-- | modules/git/command.go | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/modules/git/command.go b/modules/git/command.go index 3602717702..d6221ce268 100644 --- a/modules/git/command.go +++ b/modules/git/command.go @@ -52,9 +52,15 @@ func (c *Command) AddArguments(args ...string) *Command { return c } -// RunInDirTimeoutPipeline executes the command in given directory with given timeout, +// RunInDirTimeoutEnvPipeline executes the command in given directory with given timeout, // it pipes stdout and stderr to given io.Writer. -func (c *Command) RunInDirTimeoutPipeline(timeout time.Duration, dir string, stdout, stderr io.Writer) error { +func (c *Command) RunInDirTimeoutEnvPipeline(env []string, timeout time.Duration, dir string, stdout, stderr io.Writer) error { + return c.RunInDirTimeoutEnvFullPipeline(env, timeout, dir, stdout, stderr, nil) +} + +// RunInDirTimeoutEnvFullPipeline executes the command in given directory with given timeout, +// it pipes stdout and stderr to given io.Writer and passes in an io.Reader as stdin. +func (c *Command) RunInDirTimeoutEnvFullPipeline(env []string, timeout time.Duration, dir string, stdout, stderr io.Writer, stdin io.Reader) error { if timeout == -1 { timeout = DefaultCommandExecutionTimeout } @@ -69,9 +75,11 @@ func (c *Command) RunInDirTimeoutPipeline(timeout time.Duration, dir string, std defer cancel() cmd := exec.CommandContext(ctx, c.name, c.args...) + cmd.Env = env cmd.Dir = dir cmd.Stdout = stdout cmd.Stderr = stderr + cmd.Stdin = stdin if err := cmd.Start(); err != nil { return err } @@ -83,12 +91,30 @@ func (c *Command) RunInDirTimeoutPipeline(timeout time.Duration, dir string, std return ctx.Err() } +// RunInDirTimeoutPipeline executes the command in given directory with given timeout, +// it pipes stdout and stderr to given io.Writer. +func (c *Command) RunInDirTimeoutPipeline(timeout time.Duration, dir string, stdout, stderr io.Writer) error { + return c.RunInDirTimeoutEnvPipeline(nil, timeout, dir, stdout, stderr) +} + +// RunInDirTimeoutFullPipeline executes the command in given directory with given timeout, +// it pipes stdout and stderr to given io.Writer, and stdin from the given io.Reader +func (c *Command) RunInDirTimeoutFullPipeline(timeout time.Duration, dir string, stdout, stderr io.Writer, stdin io.Reader) error { + return c.RunInDirTimeoutEnvFullPipeline(nil, timeout, dir, stdout, stderr, stdin) +} + // RunInDirTimeout executes the command in given directory with given timeout, // and returns stdout in []byte and error (combined with stderr). func (c *Command) RunInDirTimeout(timeout time.Duration, dir string) ([]byte, error) { + return c.RunInDirTimeoutEnv(nil, timeout, dir) +} + +// RunInDirTimeoutEnv executes the command in given directory with given timeout, +// and returns stdout in []byte and error (combined with stderr). +func (c *Command) RunInDirTimeoutEnv(env []string, timeout time.Duration, dir string) ([]byte, error) { stdout := new(bytes.Buffer) stderr := new(bytes.Buffer) - if err := c.RunInDirTimeoutPipeline(timeout, dir, stdout, stderr); err != nil { + if err := c.RunInDirTimeoutEnvPipeline(env, timeout, dir, stdout, stderr); err != nil { return nil, concatenateError(err, stderr.String()) } @@ -101,7 +127,13 @@ func (c *Command) RunInDirTimeout(timeout time.Duration, dir string) ([]byte, er // RunInDirPipeline executes the command in given directory, // it pipes stdout and stderr to given io.Writer. func (c *Command) RunInDirPipeline(dir string, stdout, stderr io.Writer) error { - return c.RunInDirTimeoutPipeline(-1, dir, stdout, stderr) + return c.RunInDirFullPipeline(dir, stdout, stderr, nil) +} + +// RunInDirFullPipeline executes the command in given directory, +// it pipes stdout and stderr to given io.Writer. +func (c *Command) RunInDirFullPipeline(dir string, stdout, stderr io.Writer, stdin io.Reader) error { + return c.RunInDirTimeoutFullPipeline(-1, dir, stdout, stderr, stdin) } // RunInDirBytes executes the command in given directory @@ -113,7 +145,13 @@ func (c *Command) RunInDirBytes(dir string) ([]byte, error) { // RunInDir executes the command in given directory // and returns stdout in string and error (combined with stderr). func (c *Command) RunInDir(dir string) (string, error) { - stdout, err := c.RunInDirTimeout(-1, dir) + return c.RunInDirWithEnv(dir, nil) +} + +// RunInDirWithEnv executes the command in given directory +// and returns stdout in string and error (combined with stderr). +func (c *Command) RunInDirWithEnv(dir string, env []string) (string, error) { + stdout, err := c.RunInDirTimeoutEnv(env, -1, dir) if err != nil { return "", err } |