~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to tools/win32/ostools.py

merge merge tweaks from aaron, which includes latest .dev

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())