)""") pcur.execute(""" INSERT INTO epanet.pipes (id, start_node, end_node, length, diameter, geometry) VALUES ('0','0','1',1,2,ST_GeometryFromText('LINESTRING(1 0,0 1)',2154))""") pcur.commit() pcur.close() versioning_base.historize( pg_conn_info, 'epanet' ) failed = False try: versioning_base.add_branch( pg_conn_info, 'epanet', 'trunk' ) except: failed = True assert( failed ) failed = False try: versioning_base.add_branch( pg_conn_info, 'epanet', 'mybranch', 'message', 'toto' ) except: failed = True assert( failed ) versioning_base.add_branch( pg_conn_info, 'epanet', 'mybranch', 'test msg' ) pcur = versioning_base.Db(psycopg2.connect(pg_conn_info))
def branch(self): """create branch and import layers""" layer = QgsMapLayerRegistry.instance().mapLayer( self.current_layers[0] ) uri = QgsDataSourceURI(layer.source()) mtch = re.match(r'(.+)_([^_]+)_rev_(head|\d+)', uri.schema()) schema = mtch.group(1) base_branch = mtch.group(2) base_rev = mtch.group(3) assert(schema) dlg = QDialog() dlg.setWindowTitle('Enter branch name') layout = QVBoxLayout(dlg) button_box = QDialogButtonBox(dlg) button_box.setStandardButtons( QDialogButtonBox.Cancel|QDialogButtonBox.Ok) button_box.accepted.connect(dlg.accept) button_box.rejected.connect(dlg.reject) line_edit = QLineEdit( dlg ) layout.addWidget( line_edit ) layout.addWidget( button_box ) if not dlg.exec_() : return branch = line_edit.text() if not branch: print 'aborted' return pcur = versioning_base.Db( psycopg2.connect(self.pg_conn_info()) ) pcur.execute("SELECT * FROM "+schema+".revisions " "WHERE branch = '"+branch+"'") if pcur.fetchone(): pcur.close() QMessageBox.warning( self.iface.mainWindow(), "Warning", "Branch "+branch+' already exists.') return pcur.close() # get the commit message # get rid of the combobox asking for the pg username of committer self.q_commit_msg_dlg.pg_users_combobox.setVisible(False) self.q_commit_msg_dlg.pg_username_label.setVisible(False) if not self.q_commit_msg_dlg.exec_(): return commit_msg = self.q_commit_msg_dlg.commitMessage.document().toPlainText() if not commit_msg: QMessageBox.warning(self.iface.mainWindow(), "Warning", "No commit message, aborting commit") print "aborted" return versioning_base.add_branch( uri.connectionInfo(), schema, branch, commit_msg, base_branch, base_rev ) grp_name = branch+' revision head' grp_idx = self.iface.legendInterface().addGroup( grp_name ) for layer_id in reversed(self.current_layers): layer = QgsMapLayerRegistry.instance().mapLayer(layer_id) new_uri = QgsDataSourceURI(layer.source()) new_uri.setDataSource(schema+'_'+branch+'_rev_head', new_uri.table(), new_uri.geometryColumn(), new_uri.sql(), new_uri.keyColumn()) display_name = QgsMapLayerRegistry.instance().mapLayer(layer_id).name() new_layer = self.iface.addVectorLayer(new_uri.uri().replace('()',''), display_name, 'postgres') self.iface.legendInterface().moveLayer( new_layer, grp_idx)
import psycopg2 import os import shutil test_data_dir = os.path.dirname(os.path.realpath(__file__)) tmp_dir = "/tmp" # create the test database os.system("dropdb epanet_test_db") os.system("createdb epanet_test_db") os.system("psql epanet_test_db -c 'CREATE EXTENSION postgis'") os.system("psql epanet_test_db -f "+test_data_dir+"/epanet_test_db_unversioned.sql") versioning_base.historize("dbname=epanet_test_db","epanet") # try the update wc = tmp_dir+"/bug_in_branch_after_commit_wc.sqlite" if os.path.isfile(wc): os.remove(wc) versioning_base.checkout("dbname=epanet_test_db", ['epanet_trunk_rev_head.junctions', 'epanet_trunk_rev_head.pipes'], wc) scur = versioning_base.Db( dbapi2.connect( wc ) ) scur.execute("SELECT * FROM pipes") scur.execute("UPDATE pipes_view SET length = 1 WHERE OGC_FID = 1") scur.commit() versioning_base.commit(wc,'test', "dbname=epanet_test_db" ) versioning_base.add_branch("dbname=epanet_test_db","epanet","mybranch","add 'branch")
def branch(self): """create branch and import layers""" layer = QgsMapLayerRegistry.instance().mapLayer(self.current_layers[0]) uri = QgsDataSourceURI(layer.source()) mtch = re.match(r'(.+)_([^_]+)_rev_(head|\d+)', uri.schema()) schema = mtch.group(1) base_branch = mtch.group(2) base_rev = mtch.group(3) assert (schema) dlg = QDialog() dlg.setWindowTitle('Enter branch name') layout = QVBoxLayout(dlg) button_box = QDialogButtonBox(dlg) button_box.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) button_box.accepted.connect(dlg.accept) button_box.rejected.connect(dlg.reject) line_edit = QLineEdit(dlg) layout.addWidget(line_edit) layout.addWidget(button_box) if not dlg.exec_(): return branch = line_edit.text() if not branch: print 'aborted' return pcur = versioning_base.Db(psycopg2.connect(self.pg_conn_info())) pcur.execute("SELECT * FROM " + schema + ".revisions " "WHERE branch = '" + branch + "'") if pcur.fetchone(): pcur.close() QMessageBox.warning(self.iface.mainWindow(), "Warning", "Branch " + branch + ' already exists.') return pcur.close() # get the commit message # get rid of the combobox asking for the pg username of committer self.q_commit_msg_dlg.pg_users_combobox.setVisible(False) self.q_commit_msg_dlg.pg_username_label.setVisible(False) if not self.q_commit_msg_dlg.exec_(): return commit_msg = self.q_commit_msg_dlg.commitMessage.document( ).toPlainText() if not commit_msg: QMessageBox.warning(self.iface.mainWindow(), "Warning", "No commit message, aborting commit") print "aborted" return versioning_base.add_branch(uri.connectionInfo(), schema, branch, commit_msg, base_branch, base_rev) grp_name = branch + ' revision head' grp_idx = self.iface.legendInterface().addGroup(grp_name) for layer_id in reversed(self.current_layers): layer = QgsMapLayerRegistry.instance().mapLayer(layer_id) new_uri = QgsDataSourceURI(layer.source()) new_uri.setDataSource(schema + '_' + branch + '_rev_head', new_uri.table(), new_uri.geometryColumn(), new_uri.sql(), new_uri.keyColumn()) display_name = QgsMapLayerRegistry.instance().mapLayer( layer_id).name() new_layer = self.iface.addVectorLayer( new_uri.uri().replace('()', ''), display_name, 'postgres') self.iface.legendInterface().moveLayer(new_layer, grp_idx)