diff --git a/py/build/version.py b/py/build/version.py new file mode 100644 index 0000000000..5f9b263aab --- /dev/null +++ b/py/build/version.py @@ -0,0 +1,142 @@ +""" + Version Control: + + Schema: + + properties (key, value) + uncommitted (fname, ftype, content, timestamp) + files (fname, ftype, content, timestamp, version) + +""" + +import unittest +import os + +root_path = os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', '..')) +testfile = os.path.join(root_path, 'js/core.js') + +class TestVC(unittest.TestCase): + def setUp(self): + self.vc = VersionControl(root_path) + self.vc.setup() + + def test_add(self): + test_file = {'fname':'test.js', 'ftype':'js', 'content':'test_code', 'timestamp':'1100'} + self.vc.repo.add(**test_file) + ret = self.vc.sql('select * from uncommitted', as_dict=1)[0] + self.assertTrue(ret==test_file) + + def tearDown(self): + self.vc.close() + os.remove(os.path.join(root_path, '.wnf')) + +class VersionControl: + def __init__(self, root): + self.repo = Repository(self) + self.root(root) + + def setup(self): + """ + setup the schema + """ + self.cur.executescript(""" + create table properties(key, value); + create table uncommitted(fname, ftype, content, timestamp); + create table files(fname, ftype, content, timestamp, version); + """) + + def root(self, path=None): + """ + set / reset root and connect + """ + if path: + self.root_path = path + else: + return self.root_path + + import sqlite3 + self.conn = sqlite3.connect(os.path.join(self.root_path, '.wnf')) + self.cur = self.conn.cursor() + + def sql(self, query, values=(), as_dict=None): + """ + like webnotes.db.sql + """ + self.cur.execute(query, values) + res = self.cur.fetchall() + + if as_dict: + out = [] + for row in res: + d = {} + for idx, col in enumerate(self.cur.description): + d[col[0]] = row[idx] + out.append(d) + return out + + return res + + + def init(self): + """ + crate a .wnf db in the rool path to store the versions + """ + pass + + def ignore(self, fname): + """ + update ignore list + """ + pass + + + def add_all(self): + """ + walk the root folder Add all dirty files to the vcs + """ + pass + + def commit(self, comment=None): + """ + commit added files to the repository + """ + pass + + def close(self): + self.conn.close() + +class Repository: + def __init__(self, vc): + self.vc = vc + + def add(self, fname, ftype, timestamp, content=None): + """ + add to uncommitted + """ + self.vc.sql("insert into uncommitted(fname, ftype, timestamp, content) values (?, ?, ?, ?)" \ + , (fname, ftype, timestamp, content)) + + def commit(self, version): + """ + copy uncommitted files to repository, update the log and add the change + """ + pass + +class Log: + def __init__(self, vc): + self.vc = vc + + def add_to_log(self, version, fname, ftype): + """ + add file to log + """ + pass + + def get_diff(self, from_version, to_version=None): + """ + get list of files changed between versions + """ + pass + +if __name__=='__main__': + unittest.main() \ No newline at end of file