~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to tools/win32/ostools.py

(vila) Make all transport put_bytes() raises TypeError when given unicode
 strings rather than bytes (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
12
    ostools.py copytree FILES... DIR
 
13
                    copy files to specified directory keeping relative paths
 
14
 
 
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
 
 
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
 
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
 
 
50
        todir = argv.pop()
 
51
        retcode = makedir(todir)
 
52
        if retcode:
 
53
            return retcode
 
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
 
 
66
    if cmd == 'copytree':
 
67
        if len(argv) < 2:
 
68
            print "Usage:  ostools.py copytree FILES... DIR"
 
69
            return 1
 
70
 
 
71
        todir = argv.pop()
 
72
        retcode = makedir(todir)
 
73
        if retcode:
 
74
            return retcode
 
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)
 
84
            retcode = makedir(dest_dir)
 
85
            if retcode:
 
86
                return retcode
 
87
            shutil.copy(src, dest)
 
88
            print "Copied:", src, "=>", dest
 
89
 
 
90
        return 0
 
91
 
 
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
 
 
113
    if cmd == "basename":
 
114
        if len(argv) == 0:
 
115
            print "Usage:  ostools.py basename [PATH | URL]"
 
116
            return 1
 
117
 
 
118
        for path in argv:
 
119
            print os.path.basename(path)
 
120
        return 0
 
121
 
 
122
    if cmd == 'makedir':
 
123
        if len(argv) == 0:
 
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
 
 
132
    print "Usage error"
 
133
    print __doc__
 
134
    return 1
 
135
 
 
136
 
 
137
if __name__ == "__main__":
 
138
    sys.exit(main())