Reinstate ignore permissions
This commit is contained in:
parent
6e670a2499
commit
41e20bb6b7
@ -171,6 +171,7 @@ func (m *Model) StartFolderRW(folder string) {
|
|||||||
dir: cfg.Path,
|
dir: cfg.Path,
|
||||||
scanIntv: time.Duration(cfg.RescanIntervalS) * time.Second,
|
scanIntv: time.Duration(cfg.RescanIntervalS) * time.Second,
|
||||||
model: m,
|
model: m,
|
||||||
|
ignorePerms: cfg.IgnorePerms,
|
||||||
}
|
}
|
||||||
m.folderRunners[folder] = p
|
m.folderRunners[folder] = p
|
||||||
m.fmut.Unlock()
|
m.fmut.Unlock()
|
||||||
|
|||||||
@ -68,6 +68,7 @@ type Puller struct {
|
|||||||
model *Model
|
model *Model
|
||||||
stop chan struct{}
|
stop chan struct{}
|
||||||
versioner versioner.Versioner
|
versioner versioner.Versioner
|
||||||
|
ignorePerms bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Serve will run scans and pulls. It will return when Stop()ed or on a
|
// Serve will run scans and pulls. It will return when Stop()ed or on a
|
||||||
@ -318,6 +319,9 @@ func (p *Puller) pullerIteration(ncopiers, npullers, nfinishers int) int {
|
|||||||
func (p *Puller) handleDir(file protocol.FileInfo) {
|
func (p *Puller) handleDir(file protocol.FileInfo) {
|
||||||
realName := filepath.Join(p.dir, file.Name)
|
realName := filepath.Join(p.dir, file.Name)
|
||||||
mode := os.FileMode(file.Flags & 0777)
|
mode := os.FileMode(file.Flags & 0777)
|
||||||
|
if p.ignorePerms {
|
||||||
|
mode = 0755
|
||||||
|
}
|
||||||
|
|
||||||
if debug {
|
if debug {
|
||||||
curFile := p.model.CurrentFolderFile(p.folder, file.Name)
|
curFile := p.model.CurrentFolderFile(p.folder, file.Name)
|
||||||
@ -357,7 +361,9 @@ func (p *Puller) handleDir(file protocol.FileInfo) {
|
|||||||
// don't handle modification times on directories, because that sucks...)
|
// don't handle modification times on directories, because that sucks...)
|
||||||
// It's OK to change mode bits on stuff within non-writable directories.
|
// It's OK to change mode bits on stuff within non-writable directories.
|
||||||
|
|
||||||
if err := os.Chmod(realName, mode); err == nil {
|
if p.ignorePerms {
|
||||||
|
p.model.updateLocal(p.folder, file)
|
||||||
|
} else if err := os.Chmod(realName, mode); err == nil {
|
||||||
p.model.updateLocal(p.folder, file)
|
p.model.updateLocal(p.folder, file)
|
||||||
} else {
|
} else {
|
||||||
l.Infof("Puller (folder %q, file %q): %v", p.folder, file.Name, err)
|
l.Infof("Puller (folder %q, file %q): %v", p.folder, file.Name, err)
|
||||||
@ -509,14 +515,16 @@ func (p *Puller) handleFile(file protocol.FileInfo, copyChan chan<- copyBlocksSt
|
|||||||
// thing that has changed.
|
// thing that has changed.
|
||||||
func (p *Puller) shortcutFile(file protocol.FileInfo) {
|
func (p *Puller) shortcutFile(file protocol.FileInfo) {
|
||||||
realName := filepath.Join(p.dir, file.Name)
|
realName := filepath.Join(p.dir, file.Name)
|
||||||
|
if !p.ignorePerms {
|
||||||
err := os.Chmod(realName, os.FileMode(file.Flags&0777))
|
err := os.Chmod(realName, os.FileMode(file.Flags&0777))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Infof("Puller (folder %q, file %q): shortcut: %v", p.folder, file.Name, err)
|
l.Infof("Puller (folder %q, file %q): shortcut: %v", p.folder, file.Name, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
t := time.Unix(file.Modified, 0)
|
t := time.Unix(file.Modified, 0)
|
||||||
err = os.Chtimes(realName, t, t)
|
err := os.Chtimes(realName, t, t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Infof("Puller (folder %q, file %q): shortcut: %v", p.folder, file.Name, err)
|
l.Infof("Puller (folder %q, file %q): shortcut: %v", p.folder, file.Name, err)
|
||||||
return
|
return
|
||||||
@ -643,12 +651,14 @@ func (p *Puller) finisherRoutine(in <-chan *sharedPullerState) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set the correct permission bits on the new file
|
// Set the correct permission bits on the new file
|
||||||
|
if !p.ignorePerms {
|
||||||
err = os.Chmod(state.tempName, os.FileMode(state.file.Flags&0777))
|
err = os.Chmod(state.tempName, os.FileMode(state.file.Flags&0777))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
os.Remove(state.tempName)
|
os.Remove(state.tempName)
|
||||||
l.Warnln("puller: final:", err)
|
l.Warnln("puller: final:", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Set the correct timestamp on the new file
|
// Set the correct timestamp on the new file
|
||||||
t := time.Unix(state.file.Modified, 0)
|
t := time.Unix(state.file.Modified, 0)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user