forked from jimmyff/SublimeRsyncer
/
SublimeRsyncer.py
74 lines (59 loc) · 2.25 KB
/
SublimeRsyncer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import sublime
import sublime_plugin
import subprocess
import threading
import sys
class SublimeRsyncer(sublime_plugin.EventListener):
def on_post_save(self, view):
settings = sublime.load_settings('SublimeRsyncer.sublime-settings')
folders = settings.get("folders")
current_file = view.file_name()
if folders:
for folder in folders:
if current_file[:len(folder['localPath'])] == folder['localPath']:
# spawn a thread so non-blocking
thread = Rsync(folder['localPath'], folder['remote'], folder['exclude'], folder['deleteAfter'], folder['port'])
thread.start()
class Rsync(threading.Thread):
def __init__(self, localPath, remote, exclude, deleteAfter, port):
self.localPath = localPath
self.remote = remote
self.exclude = exclude
self.deleteAfter = deleteAfter
self.port = port
self.result = None
threading.Thread.__init__(self)
def run(self):
commandComponents = ['rsync', '-avze', 'ssh -p%s' % self.port, self.localPath, self.remote]
if self.deleteAfter:
commandComponents.insert(2, "--delete-after")
if self.exclude:
for excludeItem in self.exclude:
commandComponents.insert(2, "--exclude="+excludeItem)
sys.stdout.write('SublimeRsyncer command: '+' '.join(commandComponents)+'\n');
sys.stdout.flush()
process = subprocess.Popen(
commandComponents,
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
error = False
while True:
next_line = process.stdout.readline()
if next_line == '' and process.poll() != None:
break
sys.stdout.write(next_line)
sys.stdout.flush()
while True:
next_line = process.stderr.readline()
if next_line == '' and process.poll() != None:
break
sys.stderr.write(next_line)
sys.stderr.flush()
error = True
if (error == True):
print "SublimeRsyncer: Failed! :-("
else:
print "SublimeRsyncer: Done :-)"
return