Save relative file paths (not absolute ones)
This commit is contained in:
parent
6bdb81834c
commit
f80639c815
@ -10,6 +10,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"os/user"
|
"os/user"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AsinkGlobals struct {
|
type AsinkGlobals struct {
|
||||||
@ -99,6 +100,14 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ProcessLocalEvent(globals AsinkGlobals, event *asink.Event) {
|
func ProcessLocalEvent(globals AsinkGlobals, event *asink.Event) {
|
||||||
|
//make the path relative before we save/send it anywhere
|
||||||
|
var err error
|
||||||
|
absolutePath := event.Path
|
||||||
|
event.Path, err = filepath.Rel(globals.syncDir, event.Path)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
latestLocal := LockPath(event.Path, true)
|
latestLocal := LockPath(event.Path, true)
|
||||||
defer UnlockPath(event)
|
defer UnlockPath(event)
|
||||||
if latestLocal != nil {
|
if latestLocal != nil {
|
||||||
@ -108,7 +117,7 @@ func ProcessLocalEvent(globals AsinkGlobals, event *asink.Event) {
|
|||||||
if event.IsUpdate() {
|
if event.IsUpdate() {
|
||||||
//copy to tmp
|
//copy to tmp
|
||||||
//TODO upload in chunks and check modification times to make sure it hasn't been changed instead of copying the whole thing off
|
//TODO upload in chunks and check modification times to make sure it hasn't been changed instead of copying the whole thing off
|
||||||
tmpfilename, err := util.CopyToTmp(event.Path, globals.tmpDir)
|
tmpfilename, err := util.CopyToTmp(absolutePath, globals.tmpDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//bail out if the file we are trying to upload already got deleted
|
//bail out if the file we are trying to upload already got deleted
|
||||||
if util.ErrorFileNotFound(err) {
|
if util.ErrorFileNotFound(err) {
|
||||||
@ -119,7 +128,7 @@ func ProcessLocalEvent(globals AsinkGlobals, event *asink.Event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//try to collect the file's permissions
|
//try to collect the file's permissions
|
||||||
fileinfo, err := os.Stat(event.Path)
|
fileinfo, err := os.Stat(absolutePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//bail out if the file we are trying to upload already got deleted
|
//bail out if the file we are trying to upload already got deleted
|
||||||
if util.ErrorFileNotFound(err) {
|
if util.ErrorFileNotFound(err) {
|
||||||
@ -170,7 +179,7 @@ func ProcessLocalEvent(globals AsinkGlobals, event *asink.Event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//finally, send it off to the server
|
//finally, send it off to the server
|
||||||
err := SendEvent(globals, event)
|
err = SendEvent(globals, event)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err) //TODO handle sensibly
|
panic(err) //TODO handle sensibly
|
||||||
}
|
}
|
||||||
@ -180,6 +189,9 @@ func ProcessRemoteEvent(globals AsinkGlobals, event *asink.Event) {
|
|||||||
latestLocal := LockPath(event.Path, true)
|
latestLocal := LockPath(event.Path, true)
|
||||||
defer UnlockPath(event)
|
defer UnlockPath(event)
|
||||||
|
|
||||||
|
//get the absolute path because we may need it later
|
||||||
|
absolutePath := path.Join(globals.syncDir, event.Path)
|
||||||
|
|
||||||
//if we already have this event, or if it is older than our most recent event, bail out
|
//if we already have this event, or if it is older than our most recent event, bail out
|
||||||
if latestLocal != nil {
|
if latestLocal != nil {
|
||||||
if event.Timestamp < latestLocal.Timestamp || event.IsSameEvent(latestLocal) {
|
if event.Timestamp < latestLocal.Timestamp || event.IsSameEvent(latestLocal) {
|
||||||
@ -224,7 +236,7 @@ func ProcessRemoteEvent(globals AsinkGlobals, event *asink.Event) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
err = os.Rename(tmpfilename, event.Path)
|
err = os.Rename(tmpfilename, absolutePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := os.Remove(tmpfilename)
|
err := os.Remove(tmpfilename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -234,14 +246,14 @@ func ProcessRemoteEvent(globals AsinkGlobals, event *asink.Event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if latestLocal == nil || event.Permissions != latestLocal.Permissions {
|
if latestLocal == nil || event.Permissions != latestLocal.Permissions {
|
||||||
err := os.Chmod(event.Path, event.Permissions)
|
err := os.Chmod(absolutePath, event.Permissions)
|
||||||
if err != nil && !util.ErrorFileNotFound(err) {
|
if err != nil && !util.ErrorFileNotFound(err) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//intentionally ignore errors in case this file has been deleted out from under us
|
//intentionally ignore errors in case this file has been deleted out from under us
|
||||||
os.Remove(event.Path)
|
os.Remove(absolutePath)
|
||||||
//TODO delete file hierarchy beneath this file if its the last one in its directory?
|
//TODO delete file hierarchy beneath this file if its the last one in its directory?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user