1861.2.18
by Alexander Belchenko
Makefile: cross-platform actions for building installer |
1 |
#!/usr/bin/python
|
2 |
||
3 |
"""Cross-platform os tools: files/directories manipulations
|
|
4 |
Usage:
|
|
5 |
||
6 |
ostools.py help
|
|
7 |
prints this help
|
|
8 |
||
9 |
ostools.py copytodir FILES... DIR
|
|
10 |
copy files to specified directory
|
|
11 |
||
2691.1.16
by Ian Clatworthy
Ensure doc hierarchy is setup correctly for the Windows installer |
12 |
ostools.py copytree FILES... DIR
|
13 |
copy files to specified directory keeping relative paths
|
|
14 |
||
1861.2.18
by Alexander Belchenko
Makefile: cross-platform actions for building installer |
15 |
ostools.py remove [FILES...] [DIRS...]
|
16 |
remove files or directories (recursive)
|
|
17 |
"""
|
|
18 |
||
19 |
import glob |
|
20 |
import os |
|
21 |
import shutil |
|
22 |
import sys |
|
23 |
||
4392.3.21
by Sidnei da Silva
- Make build-installer work for both trunk and latest of both bzr and plugins |
24 |
def makedir(dirname): |
25 |
if not os.path.exists(dirname): |
|
26 |
os.makedirs(dirname) |
|
27 |
if not os.path.isdir(dirname): |
|
28 |
print "Error: Destination is not a directory", dirname |
|
29 |
return 2 |
|
30 |
return 0 |
|
1861.2.18
by Alexander Belchenko
Makefile: cross-platform actions for building installer |
31 |
|
32 |
def main(argv=None): |
|
33 |
if argv is None: |
|
34 |
argv = sys.argv[1:] |
|
35 |
||
36 |
if not argv: |
|
37 |
argv = ['help'] |
|
38 |
||
39 |
cmd = argv.pop(0) |
|
40 |
||
41 |
if cmd == 'help': |
|
42 |
print __doc__ |
|
43 |
return 0 |
|
44 |
||
45 |
if cmd == 'copytodir': |
|
46 |
if len(argv) < 2: |
|
47 |
print "Usage: ostools.py copytodir FILES... DIR" |
|
48 |
return 1 |
|
49 |
||
4392.3.24
by Sidnei da Silva
- Fix a NameError |
50 |
todir = argv.pop() |
51 |
retcode = makedir(todir) |
|
4392.3.21
by Sidnei da Silva
- Make build-installer work for both trunk and latest of both bzr and plugins |
52 |
if retcode: |
53 |
return retcode |
|
1861.2.18
by Alexander Belchenko
Makefile: cross-platform actions for building installer |
54 |
|
55 |
files = [] |
|
56 |
for possible_glob in argv: |
|
57 |
files += glob.glob(possible_glob) |
|
58 |
||
59 |
for src in files: |
|
60 |
dest = os.path.join(todir, os.path.basename(src)) |
|
61 |
shutil.copy(src, dest) |
|
62 |
print "Copied:", src, "=>", dest |
|
63 |
||
64 |
return 0 |
|
65 |
||
2691.1.16
by Ian Clatworthy
Ensure doc hierarchy is setup correctly for the Windows installer |
66 |
if cmd == 'copytree': |
67 |
if len(argv) < 2: |
|
68 |
print "Usage: ostools.py copytree FILES... DIR" |
|
69 |
return 1 |
|
70 |
||
4392.3.24
by Sidnei da Silva
- Fix a NameError |
71 |
todir = argv.pop() |
72 |
retcode = makedir(todir) |
|
4392.3.21
by Sidnei da Silva
- Make build-installer work for both trunk and latest of both bzr and plugins |
73 |
if retcode: |
74 |
return retcode |
|
2691.1.16
by Ian Clatworthy
Ensure doc hierarchy is setup correctly for the Windows installer |
75 |
|
76 |
files = [] |
|
77 |
for possible_glob in argv: |
|
78 |
files += glob.glob(possible_glob) |
|
79 |
||
80 |
for src in files: |
|
81 |
relative_path = src |
|
82 |
dest = os.path.join(todir, relative_path) |
|
83 |
dest_dir = os.path.dirname(dest) |
|
4392.3.21
by Sidnei da Silva
- Make build-installer work for both trunk and latest of both bzr and plugins |
84 |
retcode = makedir(dest_dir) |
85 |
if retcode: |
|
86 |
return retcode |
|
2691.1.16
by Ian Clatworthy
Ensure doc hierarchy is setup correctly for the Windows installer |
87 |
shutil.copy(src, dest) |
88 |
print "Copied:", src, "=>", dest |
|
89 |
||
90 |
return 0 |
|
91 |
||
1861.2.18
by Alexander Belchenko
Makefile: cross-platform actions for building installer |
92 |
if cmd == 'remove': |
93 |
if len(argv) == 0: |
|
94 |
print "Usage: ostools.py remove [FILES...] [DIRS...]" |
|
95 |
return 1 |
|
96 |
||
97 |
filesdirs = [] |
|
98 |
for possible_glob in argv: |
|
99 |
filesdirs += glob.glob(possible_glob) |
|
100 |
||
101 |
for i in filesdirs: |
|
102 |
if os.path.isdir(i): |
|
103 |
shutil.rmtree(i) |
|
104 |
print "Removed:", i |
|
105 |
elif os.path.isfile(i): |
|
106 |
os.remove(i) |
|
107 |
print "Removed:", i |
|
108 |
else: |
|
109 |
print "Not found:", i |
|
110 |
||
111 |
return 0 |
|
112 |
||
4392.3.9
by Sidnei da Silva
- Getting really close now |
113 |
if cmd == "basename": |
114 |
if len(argv) == 0: |
|
115 |
print "Usage: ostools.py basename [PATH | URL]" |
|
116 |
return 1 |
|
4392.3.21
by Sidnei da Silva
- Make build-installer work for both trunk and latest of both bzr and plugins |
117 |
|
4392.3.9
by Sidnei da Silva
- Getting really close now |
118 |
for path in argv: |
119 |
print os.path.basename(path) |
|
120 |
return 0 |
|
121 |
||
4392.3.21
by Sidnei da Silva
- Make build-installer work for both trunk and latest of both bzr and plugins |
122 |
if cmd == 'makedir': |
4392.3.22
by Sidnei da Silva
- Fix a few SNAFUs |
123 |
if len(argv) == 0: |
4392.3.21
by Sidnei da Silva
- Make build-installer work for both trunk and latest of both bzr and plugins |
124 |
print "Usage: ostools.py makedir DIR" |
125 |
return 1 |
|
126 |
||
127 |
retcode = makedir(argv.pop()) |
|
128 |
if retcode: |
|
129 |
return retcode |
|
130 |
return 0 |
|
131 |
||
1861.2.18
by Alexander Belchenko
Makefile: cross-platform actions for building installer |
132 |
print "Usage error" |
133 |
print __doc__ |
|
134 |
return 1 |
|
135 |
||
136 |
||
137 |
if __name__ == "__main__": |
|
138 |
sys.exit(main()) |