summaryrefslogtreecommitdiff
path: root/tools/win32/ostools.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/win32/ostools.py')
-rw-r--r--tools/win32/ostools.py138
1 files changed, 138 insertions, 0 deletions
diff --git a/tools/win32/ostools.py b/tools/win32/ostools.py
new file mode 100644
index 0000000..3d7ac5e
--- /dev/null
+++ b/tools/win32/ostools.py
@@ -0,0 +1,138 @@
+#!/usr/bin/python
+
+"""Cross-platform os tools: files/directories manipulations
+Usage:
+
+ ostools.py help
+ prints this help
+
+ ostools.py copytodir FILES... DIR
+ copy files to specified directory
+
+ ostools.py copytree FILES... DIR
+ copy files to specified directory keeping relative paths
+
+ ostools.py remove [FILES...] [DIRS...]
+ remove files or directories (recursive)
+"""
+
+import glob
+import os
+import shutil
+import sys
+
+def makedir(dirname):
+ if not os.path.exists(dirname):
+ os.makedirs(dirname)
+ if not os.path.isdir(dirname):
+ print "Error: Destination is not a directory", dirname
+ return 2
+ return 0
+
+def main(argv=None):
+ if argv is None:
+ argv = sys.argv[1:]
+
+ if not argv:
+ argv = ['help']
+
+ cmd = argv.pop(0)
+
+ if cmd == 'help':
+ print __doc__
+ return 0
+
+ if cmd == 'copytodir':
+ if len(argv) < 2:
+ print "Usage: ostools.py copytodir FILES... DIR"
+ return 1
+
+ todir = argv.pop()
+ retcode = makedir(todir)
+ if retcode:
+ return retcode
+
+ files = []
+ for possible_glob in argv:
+ files += glob.glob(possible_glob)
+
+ for src in files:
+ dest = os.path.join(todir, os.path.basename(src))
+ shutil.copy(src, dest)
+ print "Copied:", src, "=>", dest
+
+ return 0
+
+ if cmd == 'copytree':
+ if len(argv) < 2:
+ print "Usage: ostools.py copytree FILES... DIR"
+ return 1
+
+ todir = argv.pop()
+ retcode = makedir(todir)
+ if retcode:
+ return retcode
+
+ files = []
+ for possible_glob in argv:
+ files += glob.glob(possible_glob)
+
+ for src in files:
+ relative_path = src
+ dest = os.path.join(todir, relative_path)
+ dest_dir = os.path.dirname(dest)
+ retcode = makedir(dest_dir)
+ if retcode:
+ return retcode
+ shutil.copy(src, dest)
+ print "Copied:", src, "=>", dest
+
+ return 0
+
+ if cmd == 'remove':
+ if len(argv) == 0:
+ print "Usage: ostools.py remove [FILES...] [DIRS...]"
+ return 1
+
+ filesdirs = []
+ for possible_glob in argv:
+ filesdirs += glob.glob(possible_glob)
+
+ for i in filesdirs:
+ if os.path.isdir(i):
+ shutil.rmtree(i)
+ print "Removed:", i
+ elif os.path.isfile(i):
+ os.remove(i)
+ print "Removed:", i
+ else:
+ print "Not found:", i
+
+ return 0
+
+ if cmd == "basename":
+ if len(argv) == 0:
+ print "Usage: ostools.py basename [PATH | URL]"
+ return 1
+
+ for path in argv:
+ print os.path.basename(path)
+ return 0
+
+ if cmd == 'makedir':
+ if len(argv) == 0:
+ print "Usage: ostools.py makedir DIR"
+ return 1
+
+ retcode = makedir(argv.pop())
+ if retcode:
+ return retcode
+ return 0
+
+ print "Usage error"
+ print __doc__
+ return 1
+
+
+if __name__ == "__main__":
+ sys.exit(main())