Stop repository if the directory disappears (fixes #154)
This commit is contained in:
@@ -285,3 +285,13 @@ func ensureNodePresent(nodes []NodeConfiguration, myID string) []NodeConfigurati
|
||||
|
||||
return nodes
|
||||
}
|
||||
|
||||
func invalidateRepo(repoID string, err error) {
|
||||
for i := range cfg.Repositories {
|
||||
repo := &cfg.Repositories[i]
|
||||
if repo.ID == repoID {
|
||||
repo.Invalid = err.Error()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -559,7 +559,7 @@ func (m *Model) ScanRepos() {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Model) ScanRepo(repo string) {
|
||||
func (m *Model) ScanRepo(repo string) error {
|
||||
sup := &suppressor{threshold: int64(cfg.Options.MaxChangeKbps)}
|
||||
m.rmut.RLock()
|
||||
w := &scanner.Walker{
|
||||
@@ -572,9 +572,13 @@ func (m *Model) ScanRepo(repo string) {
|
||||
}
|
||||
m.rmut.RUnlock()
|
||||
m.setState(repo, RepoScanning)
|
||||
fs, _ := w.Walk()
|
||||
fs, _, err := w.Walk()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
m.ReplaceLocal(repo, fs)
|
||||
m.setState(repo, RepoIdle)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Model) SaveIndexes(dir string) {
|
||||
|
||||
@@ -173,7 +173,11 @@ func (p *puller) run() {
|
||||
if debugPull {
|
||||
dlog.Printf("%q: time for rescan", p.repo)
|
||||
}
|
||||
p.model.ScanRepo(p.repo)
|
||||
err := p.model.ScanRepo(p.repo)
|
||||
if err != nil {
|
||||
invalidateRepo(p.repo, err)
|
||||
return
|
||||
}
|
||||
|
||||
default:
|
||||
}
|
||||
@@ -190,7 +194,11 @@ func (p *puller) runRO() {
|
||||
if debugPull {
|
||||
dlog.Printf("%q: time for rescan", p.repo)
|
||||
}
|
||||
p.model.ScanRepo(p.repo)
|
||||
err := p.model.ScanRepo(p.repo)
|
||||
if err != nil {
|
||||
invalidateRepo(p.repo, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user