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