# Basic Version Control
# Author: commentator8
# Takes the given file and tag as argument,
# and saves a copy to run dir/VC with incremental number and tag
# Input: c:/dir1/dir2/file.py "tag"
# Saved Output: c:/dir1/dir2/VC/file_0001_tag.py
# Can add extra argument as follows -v to increment first number of series.
# files example (notepad++ F5): python c:\users\user\dropbox\txt\versionControl\versioner.py "$(FULL_CURRENT_PATH)" "Threading Working" -v
# folder example: python c:\users\user\dropbox\txt\versionControl\versioner.py "C:\Users\user\Dropbox\txt\Downloader" "Initial backup"
import os, sys
import time
import shutil
import zipfile
def list_dir(path, zip):
files_to_zip = []
for root, dirs, files in os.walk(path):
if root.split('\\')[-1] in ['index']:
continue
for file in files:
if file.split('.')[-1] != 'zip' or root.split('\\')[-1] != 'VC':
files_to_zip.append(os.path.join(root, file))
return files_to_zip
version_up = False
if '-v' in sys.argv:
version_up = True
sys.argv.remove('-v')
if len(sys.argv) != 3:
print 'Wrong number of arguments passed in. Please try again.'
print sys.argv
time.sleep(4)
exit()
file = sys.argv[1].replace('\'"', '')
file_tag = sys.argv[2].replace('\'"', '')
file_name = os.path.split(file)[-1].split('.')[0]
file_ext = os.path.split(file)[-1].split('.')[-1]
if file_name == '' or os.path.isdir(file):
folder_name = os.path.split(file.strip('\\'))[-1]
if file[-1] not in ['\\', '/']:
file += '\\'
folder = file
if '/' not in file and '\\' not in file:
print 'Check if this is a file passed in'
time.sleep(4)
exit()
vc_path = os.path.split(file)[0] + '/VC/'
highest_ver = 0
for dirname, dirnames, filenames in os.walk(vc_path):
for f in filenames:
file_name_vc = f.partition('_')[0]
number = (f.partition('_')[-1]).partition('_')[0]
tag = ((f.partition('_')[-1]).partition('_')[-1]).partition('_')[0]
# allow for multiple backed up files in single dir
if file_name:
if file_name_vc != file_name:
continue
elif file_name_vc != folder_name:
continue
if number > highest_ver:
highest_ver = int(number)
series_number = (str(highest_ver + 1).zfill(4))
if version_up:
series_number = str(int(series_number[0]) + 1) + '001'
if os.path.isdir(file):
print 'Copy folder:\n"%s"\n\nto destination:\n"%s"\n\nwith version:\n"%s"\n\nand tag:\n"%s"\n' % (folder_name, vc_path, series_number, file_tag)
else:
print 'Copy file:\n"%s"\n\nto destination:\n"%s"\n\nwith version:\n"%s"\n\nand tag:\n"%s"\n' % (file_name, vc_path, series_number, file_tag)
answer = raw_input('\nDo you want to continue?\n')
if answer.lower() in ['y', 'yes']:
pass
else:
exit()
if not os.path.exists(vc_path):
os.makedirs(vc_path)
if os.path.isdir(file):
new_file = vc_path + folder_name + '_' + series_number + "_" + file_tag + '.zip'
zip = zipfile.ZipFile(new_file, 'w')
files_to_zip = list_dir(folder, zip)
for i in files_to_zip:
zip.write(i, arcname = i.replace(folder.rpartition(folder_name)[0], ''))
zip.close()
else:
new_file = vc_path + file_name + '_' + series_number + "_" + file_tag + '.' + file_ext
shutil.copyfile(file, new_file)
print
print 'All Done'
time.sleep(2)