162 lines
4.1 KiB
Python
Executable file
162 lines
4.1 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
import os, sys
|
|
|
|
from py.build import version
|
|
version.verbose = True
|
|
|
|
def print_help():
|
|
print "wnframework version control utility"
|
|
print
|
|
print "Usage:"
|
|
print "python lib/wnf.py build : scan all folders and commit versions with latest changes"
|
|
print "python lib/wnf.py setup : setup the local system (from master or fresh)"
|
|
print "python lib/wnf.py merge : merge from local into master"
|
|
print "python lib/wnf.py log : list last 10 commits"
|
|
print "python lib/wnf.py pull : pull from git"
|
|
print "python lib/wnf.py replace txt1 txt2 extn"
|
|
print "python lib/wnf.py patch patch1 .. : run patches from patches module if not executed"
|
|
print "python lib/wnf.py patch -f patch1 .. : run patches from patches module, force rerun"
|
|
|
|
def setup():
|
|
import os, sys
|
|
|
|
if not os.path.exists('versions-local.db'):
|
|
if os.path.exists('versions-master.db'):
|
|
import shutil
|
|
shutil.copyfile('versions-master.db', 'versions-local.db')
|
|
print "created versions-local.db from versions-master.db"
|
|
else:
|
|
vc = version.VersionControl()
|
|
vc.repo.setup()
|
|
vc.close()
|
|
print "created fresh versions-local.db"
|
|
else:
|
|
if len(sys.argv)==3 and sys.argv[2]=='master':
|
|
import shutil
|
|
shutil.copyfile('versions-local.db', 'versions-master.db')
|
|
print "created versions-master.db from versions-local.db"
|
|
else:
|
|
print "versions-local.db already exists. Nothing to do."
|
|
|
|
"""simple replacement script"""
|
|
|
|
def replace_code(start, txt1, txt2, extn):
|
|
"""replace all txt1 by txt2 in files with extension (extn)"""
|
|
import os, re
|
|
for wt in os.walk(start, followlinks=1):
|
|
for fn in wt[2]:
|
|
if fn.split('.')[-1]==extn:
|
|
fpath = os.path.join(wt[0], fn)
|
|
f = open(fpath, 'r')
|
|
content = f.read()
|
|
f.close()
|
|
|
|
if re.search(txt1, content):
|
|
|
|
f = open(fpath, 'w')
|
|
f.write(re.sub(txt1, txt2, content))
|
|
f.close()
|
|
|
|
print 'updated in %s' % fpath
|
|
|
|
def run():
|
|
sys.path.append('lib')
|
|
sys.path.append('lib/py')
|
|
import webnotes
|
|
import webnotes.defs
|
|
sys.path.append(webnotes.defs.modules_path)
|
|
|
|
if len(sys.argv)<2:
|
|
print_help()
|
|
return
|
|
|
|
cmd = sys.argv[1]
|
|
|
|
if cmd=='watch':
|
|
from py import build
|
|
import time
|
|
|
|
while True:
|
|
build.run()
|
|
|
|
vc = version.VersionControl()
|
|
print 'version %s' % vc.repo.get_value('last_version_number')
|
|
time.sleep(5)
|
|
|
|
|
|
elif cmd=='build':
|
|
from py import build
|
|
build.run()
|
|
|
|
vc = version.VersionControl()
|
|
print 'version %s' % vc.repo.get_value('last_version_number')
|
|
|
|
elif cmd=='merge':
|
|
vc = version.VersionControl()
|
|
vc.setup_master()
|
|
vc.merge(vc.repo, vc.master)
|
|
vc.close()
|
|
|
|
elif cmd=='merge-local':
|
|
vc = version.VersionControl()
|
|
vc.setup_master()
|
|
vc.merge(vc.master, vc.repo)
|
|
vc.close()
|
|
|
|
elif cmd=='setup':
|
|
setup()
|
|
|
|
elif cmd=='clear_startup':
|
|
# experimental
|
|
from webnotes import startup
|
|
startup.clear_info('all')
|
|
|
|
vc = version.VersionControl()
|
|
print 'version %s' % vc.repo.get_value('last_version_number')
|
|
|
|
elif cmd=='log':
|
|
vc = version.VersionControl()
|
|
for l in vc.repo.sql("select * from log order by rowid desc limit 10 ", as_dict =1):
|
|
print 'file:'+ l['fname'] + ' | version: ' + l['version']
|
|
print 'version %s' % vc.repo.get_value('last_version_number')
|
|
vc.close()
|
|
|
|
elif cmd=='files':
|
|
vc = version.VersionControl()
|
|
for f in vc.repo.sql("select fname from files where fname like ?", ((sys.argv[2] + '%'),)):
|
|
print f[0]
|
|
vc.close()
|
|
|
|
# pull from remote and merge with local
|
|
elif cmd=='gitpull':
|
|
branch = 'master'
|
|
if len(sys.argv)>2:
|
|
branch = sys.argv[2]
|
|
|
|
print "pulling erpnext"
|
|
os.system('git pull origin %s' % branch)
|
|
vc = version.VersionControl()
|
|
vc.setup_master()
|
|
vc.merge(vc.master, vc.repo)
|
|
vc.close()
|
|
|
|
print "pulling framework"
|
|
os.chdir('lib')
|
|
os.system('git pull origin %s' % branch)
|
|
|
|
# replace code
|
|
elif cmd=='replace':
|
|
replace_code('.', sys.argv[2], sys.argv[3], sys.argv[4])
|
|
|
|
elif cmd=='patch':
|
|
from webnotes.modules.patch_handler import run
|
|
if len(sys.argv)>2 and sys.argv[2]=='-f':
|
|
# force patch
|
|
run(patch_list = sys.argv[3:], overwrite=1, log_exception=0)
|
|
else:
|
|
# run patch once
|
|
run(patch_list = sys.argv[2:], log_exception=0)
|
|
|
|
if __name__=='__main__':
|
|
run()
|