Allow checking a read-only repo with --no-lock
This commit is contained in:
parent
acba82c8f7
commit
c79dcbd7c4
2 changed files with 37 additions and 7 deletions
|
@ -9,8 +9,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type CmdCheck struct {
|
type CmdCheck struct {
|
||||||
ReadData bool `long:"read-data" description:"Read data blobs" default:"false"`
|
ReadData bool `long:"read-data" default:"false" description:"Read data blobs"`
|
||||||
CheckUnused bool `long:"check-unused" description:"Check for unused blobs" default:"false"`
|
CheckUnused bool `long:"check-unused" default:"false" description:"Check for unused blobs"`
|
||||||
|
NoLock bool `long:"no-lock" default:"false" description:"Do not lock repository, this allows checking read-only"`
|
||||||
|
|
||||||
global *GlobalOptions
|
global *GlobalOptions
|
||||||
}
|
}
|
||||||
|
@ -39,12 +40,14 @@ func (cmd CmdCheck) Execute(args []string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !cmd.NoLock {
|
||||||
cmd.global.Verbosef("Create exclusive lock for repository\n")
|
cmd.global.Verbosef("Create exclusive lock for repository\n")
|
||||||
lock, err := lockRepoExclusive(repo)
|
lock, err := lockRepoExclusive(repo)
|
||||||
defer unlockRepo(lock)
|
defer unlockRepo(lock)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
chkr := checker.New(repo)
|
chkr := checker.New(repo)
|
||||||
|
|
||||||
|
|
|
@ -103,6 +103,16 @@ func cmdCheckOutput(t testing.TB, global GlobalOptions) string {
|
||||||
return string(buf.Bytes())
|
return string(buf.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func cmdCheckNoLock(t testing.TB, global GlobalOptions) {
|
||||||
|
cmd := &CmdCheck{
|
||||||
|
global: &global,
|
||||||
|
ReadData: true,
|
||||||
|
CheckUnused: true,
|
||||||
|
NoLock: true,
|
||||||
|
}
|
||||||
|
OK(t, cmd.Execute(nil))
|
||||||
|
}
|
||||||
|
|
||||||
func cmdRebuildIndex(t testing.TB, global GlobalOptions) {
|
func cmdRebuildIndex(t testing.TB, global GlobalOptions) {
|
||||||
global.stdout = ioutil.Discard
|
global.stdout = ioutil.Discard
|
||||||
cmd := &CmdRebuildIndex{global: &global}
|
cmd := &CmdRebuildIndex{global: &global}
|
||||||
|
@ -788,3 +798,20 @@ func TestOptimizeRemoveUnusedBlobs(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCheckRestoreNoLock(t *testing.T) {
|
||||||
|
withTestEnvironment(t, func(env *testEnvironment, global GlobalOptions) {
|
||||||
|
datafile := filepath.Join("testdata", "repo-restore-permissions-test.tar.gz")
|
||||||
|
SetupTarTestFixture(t, env.base, datafile)
|
||||||
|
|
||||||
|
err := filepath.Walk(env.repo, func(p string, fi os.FileInfo, e error) error {
|
||||||
|
if e != nil {
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
return os.Chmod(p, fi.Mode() & ^(os.FileMode(0222)))
|
||||||
|
})
|
||||||
|
OK(t, err)
|
||||||
|
|
||||||
|
cmdCheckNoLock(t, global)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue