|
|
@@ -124,12 +124,10 @@ type CheckAttributeReader struct { |
|
|
|
env []string |
|
|
|
ctx context.Context |
|
|
|
cancel context.CancelFunc |
|
|
|
running chan struct{} |
|
|
|
} |
|
|
|
|
|
|
|
// Init initializes the cmd |
|
|
|
func (c *CheckAttributeReader) Init(ctx context.Context) error { |
|
|
|
c.running = make(chan struct{}) |
|
|
|
cmdArgs := []string{"check-attr", "--stdin", "-z"} |
|
|
|
|
|
|
|
if len(c.IndexFile) > 0 && CheckGitVersionAtLeast("1.7.8") == nil { |
|
|
@@ -194,14 +192,6 @@ func (c *CheckAttributeReader) Run() error { |
|
|
|
Stdin: c.stdinReader, |
|
|
|
Stdout: c.stdOut, |
|
|
|
Stderr: stdErr, |
|
|
|
PipelineFunc: func(_ context.Context, _ context.CancelFunc) error { |
|
|
|
select { |
|
|
|
case <-c.running: |
|
|
|
default: |
|
|
|
close(c.running) |
|
|
|
} |
|
|
|
return nil |
|
|
|
}, |
|
|
|
}) |
|
|
|
if err != nil && // If there is an error we need to return but: |
|
|
|
c.ctx.Err() != err && // 1. Ignore the context error if the context is cancelled or exceeds the deadline (RunWithContext could return c.ctx.Err() which is Canceled or DeadlineExceeded) |
|
|
@@ -222,7 +212,7 @@ func (c *CheckAttributeReader) CheckPath(path string) (rs map[string]string, err |
|
|
|
select { |
|
|
|
case <-c.ctx.Done(): |
|
|
|
return nil, c.ctx.Err() |
|
|
|
case <-c.running: |
|
|
|
default: |
|
|
|
} |
|
|
|
|
|
|
|
if _, err = c.stdinWriter.Write([]byte(path + "\x00")); err != nil { |
|
|
@@ -249,11 +239,6 @@ func (c *CheckAttributeReader) CheckPath(path string) (rs map[string]string, err |
|
|
|
func (c *CheckAttributeReader) Close() error { |
|
|
|
c.cancel() |
|
|
|
err := c.stdinWriter.Close() |
|
|
|
select { |
|
|
|
case <-c.running: |
|
|
|
default: |
|
|
|
close(c.running) |
|
|
|
} |
|
|
|
return err |
|
|
|
} |
|
|
|
|