Commit abbc06c70c476280fd304b432c6f4d42caaecabf

Authored by Göran Krampe
2 parents 85eedc50 ed979253

Merge branch 'issue1' into 'master'

Issue1

Fixed #1

See merge request !1
Showing 1 changed file with 18 additions and 8 deletions
blimp.nim
... ... @@ -20,7 +20,7 @@ import md5, os, osproc, parseopt2, strutils, parsecfg, streams, lapp, subexes
20 20 # ~/blimpstore/.blimp.conf
21 21  
22 22 var
23   - blimpStore, uploadCommandFormat, downloadCommandFormat, deleteCommandFormat: string
  23 + blimpStore, uploadCommandFormat, downloadCommandFormat, deleteCommandFormat, rsyncPassword: string
24 24 remoteBlimpStore: string = nil
25 25 verbose: bool
26 26  
... ... @@ -28,14 +28,15 @@ let
28 28 defaultConfig = """
29 29 [rsync]
30 30 # Set this to your remote rsync daemon area
31   -remote = "blimp@some-rsync-server.com::blimpstore"
  31 +remote = "blimpuser@some-rsync-server.com::blimpstore"
  32 +password = some-good-rsync-password-for-blimpuser
32 33  
33 34 # The following three formats should not need editing
34 35 # $1 is filename, $2 is remote and $3 is the local blimpstore
35   -upload = "rsync --password-file ~/blimp.pass -avzP $3/$1 $2/"
36   -download = "rsync --password-file ~/blimp.pass -avzP $2/$1 $3/"
  36 +upload = "rsync --password-file $3/.blimp.pass -avzP $3/$1 $2/"
  37 +download = "rsync --password-file $3/.blimp.pass -avzP $2/$1 $3/"
37 38 # This deletes a single file from destination, that is already deleted in source
38   -delete = "rsync --password-file ~/blimp.pass -dv --delete --existing --ignore-existing --include '$1' --exclude '*' $3/ $2"
  39 +delete = "rsync --password-file $3/.blimp.pass -dv --delete --existing --ignore-existing --include '$1' --exclude '*' $3/ $2"
39 40 """
40 41  
41 42 # Load blimp.conf file, overkill for now but...
... ... @@ -61,6 +62,8 @@ proc parseConfFile(filename: string) =
61 62 downloadCommandFormat = e.value
62 63 of "delete":
63 64 deleteCommandFormat = e.value
  65 + of "password":
  66 + rsyncPassword = e.value
64 67 else:
65 68 quit("Unknown configuration: " & e.key)
66 69 of cfgOption:
... ... @@ -74,12 +77,19 @@ proc run(cmd: string): auto =
74 77 if verbose: echo(cmd)
75 78 execCmd(cmd)
76 79  
  80 +# Every rsync command, make sure we have a password file
  81 +proc rsyncRun(cmd: string): auto =
  82 + writeFile(blimpStore / ".blimp.pass", rsyncPassword)
  83 + if execCmd("chmod 600 " & blimpStore / ".blimp.pass") != 0:
  84 + quit("Failed to chmod 600 " & blimpStore / ".blimp.pass")
  85 + run(cmd)
  86 +
77 87 # Upload a file to the remote master blimpStore
78 88 proc uploadFile(blimpFilename: string) =
79 89 if remoteBlimpStore.isNil:
80 90 echo("Remote blimpstore not set in configuration file, skipping uploading content:\n\t" & blimpFilename)
81 91 return
82   - let errorCode = run(format(uploadCommandFormat, blimpFilename, remoteBlimpStore, blimpStore))
  92 + let errorCode = rsyncRun(format(uploadCommandFormat, blimpFilename, remoteBlimpStore, blimpStore))
83 93 if errorCode != 0:
84 94 quit("Something went wrong uploading " & blimpFilename & " to " & remoteBlimpStore, 2)
85 95  
... ... @@ -87,7 +97,7 @@ proc uploadFile(blimpFilename: string) =
87 97 proc downloadFile(blimpFilename: string) =
88 98 if remoteBlimpStore.isNil:
89 99 quit("Remote blimpstore not set in configuration file, can not download content:\n\t" & blimpFilename)
90   - let errorCode = run(format(downloadCommandFormat, blimpFilename, remoteBlimpStore, blimpStore))
  100 + let errorCode = rsyncRun(format(downloadCommandFormat, blimpFilename, remoteBlimpStore, blimpStore))
91 101 if errorCode != 0:
92 102 quit("Something went wrong downloading " & blimpFilename & " from " & remoteBlimpStore, 3)
93 103  
... ... @@ -95,7 +105,7 @@ proc downloadFile(blimpFilename: string) =
95 105 proc remoteDeleteFile(blimpFilename: string) =
96 106 if remoteBlimpStore.isNil:
97 107 return
98   - let errorCode = run(format(deleteCommandFormat, blimpFilename, remoteBlimpStore, blimpStore))
  108 + let errorCode = rsyncRun(format(deleteCommandFormat, blimpFilename, remoteBlimpStore, blimpStore))
99 109 if errorCode != 0:
100 110 quit("Something went wrong deleting " & blimpFilename & " from " & remoteBlimpStore, 3)
101 111  
... ...