/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to tools/win32/ostools.py

  • Committer: John Arbash Meinel
  • Date: 2010-01-12 22:51:31 UTC
  • mto: This revision was merged to the branch mainline in revision 4955.
  • Revision ID: john@arbash-meinel.com-20100112225131-he8h411p6aeeb947
Delay grabbing an output stream until we actually go to show a diff.

This makes the test suite happy, but it also seems to be reasonable.
If we aren't going to write anything, we don't need to hold an
output stream open.

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