def testOsmImport(self): repoPath = self.getTempRepoPath() repo = Repository(repoPath, init = True) osmfile = os.path.join(os.path.dirname(__file__), "data", "osm", "ways.xml") repo.importosm(osmfile) feature = Feature(repo, geogig.WORK_HEAD, "way/31045880") self.assertTrue(feature.exists())
def createRepo(self): repopath = self.getTempFolderPath() repo = Repository(repopath, init = True) shpfile = os.path.join(os.path.dirname(__file__), "data", "shp", "landuse", "landuse2.shp") repo.importshp(shpfile, False, "landuse", "fid") repo.addandcommit("first") return repo
def testOsmImportWithMappingFile(self): repoPath = self.getTempRepoPath() repo = Repository(repoPath, init = True) osmfile = os.path.join(os.path.dirname(__file__), "data", "osm", "ways.xml") mappingfile = os.path.join(os.path.dirname(__file__), "data", "osm", "mapping.json") repo.importosm(osmfile, False, mappingfile) feature = Feature(repo, geogig.WORK_HEAD, "onewaystreets/31045880") self.assertTrue(feature.exists())
def testLargeDiff(self): repo = Repository(self.getTempRepoPath(), init=True) path = os.path.join(os.path.dirname(__file__), "data", "shp", "1", "parks.shp") repo.importshp(path) repo.addandcommit("message") path = os.path.join(os.path.dirname(__file__), "data", "shp", "elevation", "elevation.shp") repo.importshp(path) repo.addandcommit("message_2") s = repo.diff("HEAD~1", "HEAD")
def _checkFeatureModifiedInRepo(): connector = PyQtConnectorDecorator() connector.checkIsAlive() repo = Repository(os.path.join(_tempReposPath, "repos", "repo"), connector) diffs = repo.diff("master", Commitish(repo, "master").parent.ref) assert 1 == len(diffs) layer = layerFromName("points") feature = layer.getFeatures().next() geogigid = str(feature[1]) assert "points/" + geogigid == diffs[0].path
def __init__(self, owner): self.geogig_dir = settings.GEOGIG_REPO + "/" + str(owner.id) if not os.path.exists(self.geogig_dir): # create repo self.repo = Repository(self.geogig_dir, init=True) self.repo.config(geogig.USER_NAME, owner.username) self.repo.config(geogig.USER_EMAIL, owner.email) else: # use existing repo self.repo = Repository(self.geogig_dir, init=False)
def __init__(self, owner): self.geogig_dir = settings.GEOGIG_REPO+'/'+str(owner.id) if not os.path.exists(self.geogig_dir): #create repo self.repo = Repository(self.geogig_dir, init=True) self.repo.config(geogig.USER_NAME, owner.username) self.repo.config(geogig.USER_EMAIL, owner.email) else: #use existing repo self.repo = Repository(self.geogig_dir, init=False)
def testImportExportInDifferentFormats(self): repopath = self.getTempFolderPath() repo = Repository(repopath, init = True) geojsonfile = os.path.join(os.path.dirname(__file__), "data", "geojson", "landuse.geojson") repo.importgeojson(geojsonfile, False, "landuse", "fid") repo.addandcommit("commit") shpfile = os.path.join(self.getTempFolderPath(), "landuse.shp") repo.exportshp(geogig.HEAD, "landuse", shpfile) repo.importshp(shpfile, False, "landuse", "fid") unstaged = repo.unstaged() self.assertEquals(0, unstaged)
def testOsmImportWithMapping(self): mapping = OSMMapping() rule = OSMMappingRule("onewaystreets") rule.addfilter("oneway", "yes") rule.addfield("lit", "lit", geogig.TYPE_STRING) rule.addfield("geom", "the_geom", geogig.TYPE_LINESTRING) mapping.addrule(rule) repoPath = self.getTempRepoPath() repo = Repository(repoPath, init = True) osmfile = os.path.join(os.path.dirname(__file__), "data", "osm", "ways.xml") repo.importosm(osmfile, False, mapping) feature = Feature(repo, geogig.WORK_HEAD, "onewaystreets/31045880") self.assertTrue(feature.exists())
def testLargeHistory(self): NUMPOINTS = 6000 repo = Repository(self.getTempRepoPath(), init=True) path = os.path.join(os.path.dirname(__file__), "data", "shp", "elevation", "elevation.shp") repo.importshp(path) repo.add() for i in xrange(NUMPOINTS): feature = "elevation/" + str(i + 1) message = "message " + str(i + 1) repo.commit(message, [feature]) log = repo.log()
def testPushToExistingEmptyRepo(self): repopath = self.getTempFolderPath() remote = Repository(repopath, init=True) local = self.createRepo() local.addremote("myremote", repopath) local.push("myremote") self.assertEquals(remote.head.id, local.head.id)
def createRepo(title): safeName = "".join(x for x in title if x.isalnum()) path = os.path.join(repoFolder(safeName)) repo = Repository(path, PyQtConnectorDecorator(), True) filename = os.path.join(path, "title") with open(filename, "w") as f: f.write(title) return repo
class MapToolGeoGigInfo(QgsMapTool): def __init__(self, canvas): QgsMapTool.__init__(self, canvas) self.setCursor(QtCore.Qt.CrossCursor) def canvasPressEvent(self, e): layer = config.iface.activeLayer() if layer is None or not isinstance(layer, QgsVectorLayer): config.iface.messageBar().pushMessage( "No layer selected or the current active layer is not a valid vector layer", level=QgsMessageBar.WARNING, duration=4) return if not layertracking.isTracked(layer): config.iface.messageBar().pushMessage( "The current active layer is not being tracked as part of a GeoGig repo", level=QgsMessageBar.WARNING, duration=4) return trackedlayer = layertracking.getTrackingInfo(layer) point = self.toMapCoordinates(e.pos()) searchRadius = self.canvas().extent().width() * .01 r = QgsRectangle() r.setXMinimum(point.x() - searchRadius) r.setXMaximum(point.x() + searchRadius) r.setYMinimum(point.y() - searchRadius) r.setYMaximum(point.y() + searchRadius) r = self.toLayerCoordinates(layer, r) fit = layer.getFeatures(QgsFeatureRequest().setFilterRect(r).setFlags( QgsFeatureRequest.ExactIntersect)) fid = None try: feature = fit.next() try: fid = unicode(feature["geogigid"]) except: pass except StopIteration, e: return if fid is None: config.iface.messageBar().pushMessage( "No 'geogigid' field found in layer. Cannot identify features.", level=QgsMessageBar.WARNING, duration=4) return try: connector = PyQtConnectorDecorator() connector.checkIsAlive() repo = Repository(trackedlayer.repoFolder, connector, False) except Exception, e: config.iface.messageBar().pushMessage( "The repository linked to the active layer is not valid", level=QgsMessageBar.WARNING, duration=4) return
def importClicked(self): if self.repo is None: connector = PyQtConnectorDecorator() connector.checkIsAlive() self.repo = Repository(self.repos[self.repoCombo.currentText()], connector) if self.layer is None: text = self.layerCombo.currentText() self.layer = resolveLayer(text) source = self.layer.source() hasIdField = self.layer.dataProvider().fieldNameIndex("geogigid") != -1 if not hasIdField: autoAddId = config.getConfigValue(config.GENERAL, config.AUTO_ADD_ID) if not autoAddId: dlg = AddGeogigIdDialog(self) ok, check = dlg.exec_() if ok == QtGui.QMessageBox.No: self.close() return if check: config.setConfigValue(config.GENERAL, config.AUTO_ADD_ID, True) QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor)) addIdField(self.layer) QtGui.QApplication.restoreOverrideCursor() hasIdField = self.layer.dataProvider().fieldNameIndex("geogigid") != -1 if not hasIdField: QtGui.QMessageBox.warning(self, "Error", "Could not add 'geogigid' field to layer.\n" "Possible causes for this are:\n" "- No permission to edit the layer.\n", QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok) return # determine encoding # first look in .cpg file cpgPath = source.replace('.shp', '.cpg') if os.path.exists(cpgPath): with open(cpgPath) as f: charset = f.readline().strip('\r\n') else: # try to get encoding from provider charset = self.layer.dataProvider().encoding() if charset.lower() == 'system': # get encoding from system charset = locale.getpreferredencoding() self.repo.importshp(source, False, self.layer.name(), "geogigid", True, charset) message = self.messageBox.toPlainText() self.repo.add() try: self.repo.commit(message) except UnconfiguredUserException, e: configureUser() self.repo.commit(message)
def connect2repo(path, remote='localhost', repo_type='local'): print 'connect 2 repo %s' % path if os.path.isdir(os.path.join(path, '.geogig')): print "Set to existing repo" try: repos = Repository(path) except GeoGigException, e: print e return repos
def createRepo(self): repopath = self.getTempFolderPath() repo = Repository(repopath, init=True) shpfile = os.path.join(os.path.dirname(__file__), "data", "shp", "landuse", "landuse2.shp") repo.importshp(shpfile, False, "landuse", "fid") repo.addandcommit("first") return repo
def importClicked(self): if self.repo is None: connector = PyQtConnectorDecorator() connector.checkIsAlive() self.repo = Repository(self.repos[self.repoCombo.currentText()], connector) if self.layer is None: text = self.layerCombo.currentText() self.layer = resolveLayer(text) source = self.layer.source() hasIdField = self.layer.dataProvider().fieldNameIndex("geogigid") != -1 if not hasIdField: autoAddId = config.getConfigValue(config.GENERAL, config.AUTO_ADD_ID) if not autoAddId: dlg = AddGeogigIdDialog(self) ok, check = dlg.exec_() if ok == QtGui.QMessageBox.No: self.close() return if check: config.setConfigValue(config.GENERAL, config.AUTO_ADD_ID, True) QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor)) addIdField(self.layer) QtGui.QApplication.restoreOverrideCursor() hasIdField = self.layer.dataProvider().fieldNameIndex("geogigid") != -1 if not hasIdField: QtGui.QMessageBox.warning(self, "Error", "Could not add 'geogigid' field to layer.\n" "Possible causes for this are:\n" "- No permission to edit the layer.\n", QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok) return self.repo.importshp(source, False, self.layer.name(), "geogigid", True) message = self.messageBox.toPlainText() self.repo.add() try: self.repo.commit(message) except UnconfiguredUserException, e: configdlg = UserConfigDialog(config.iface.mainWindow()) configdlg.exec_() if configdlg.user is not None: self.repo.config(geogig.USER_NAME, configdlg.user) self.repo.config(geogig.USER_EMAIL, configdlg.email) self.repo.commit(message) else: return
class Git: """ TODO::write some docs """ def __init__(self, owner): self.geogig_dir = settings.GEOGIG_REPO+'/'+str(owner.id) if not os.path.exists(self.geogig_dir): #create repo self.repo = Repository(self.geogig_dir, init=True) self.repo.config(geogig.USER_NAME, owner.username) self.repo.config(geogig.USER_EMAIL, owner.email) else: #use existing repo self.repo = Repository(self.geogig_dir, init=False) def push(self, shp=None, commit_msg=None): """ import (may take some time!) and commit uploaded shape file in repo """ self.repo.importshp(shp) self.repo.add() self.repo.commit(message=commit_msg) def log(self): """ log """ log = self.repo.log() list_info = [] for l in log: info = { 'id': l.id, 'date': l.committerprettydate(), 'msg': l.message } list_info.append(info) return list_info
def testLogEmptyRepo(self): repoPath = self.getTempRepoPath() repo = Repository(repoPath, init = True) log = repo.log() self.assertFalse(log)
def createRepo(): global _repo repo = Repository(getTempRepoPath(), init=True) path = os.path.join(os.path.dirname(__file__), "data", "shp", "1", "parks.shp") repo.importshp(path) repo.addandcommit("message") path = os.path.join(os.path.dirname(__file__), "data", "shp", "2", "parks.shp") repo.importshp(path) repo.addandcommit("message_2") path = os.path.join(os.path.dirname(__file__), "data", "shp", "3", "parks.shp") repo.importshp(path) repo.addandcommit("message_3") repo.createbranch(geogig.HEAD, "conflicted") repo.createbranch(geogig.HEAD, "unconflicted") path = os.path.join(os.path.dirname(__file__), "data", "shp", "4", "parks.shp") repo.importshp(path) repo.addandcommit("message_4") repo.checkout("conflicted") path = os.path.join(os.path.dirname(__file__), "data", "shp", "5", "parks.shp") repo.importshp(path) repo.addandcommit("message_5") repo.checkout("unconflicted") path = os.path.join(os.path.dirname(__file__), "data", "shp", "6", "parks.shp") repo.importshp(path) repo.addandcommit("message_6") repo.checkout(geogig.MASTER) repo.config(geogig.USER_NAME, "user") repo.config(geogig.USER_EMAIL, "user") _repo = repo
class Git: """ TODO::write some docs """ def __init__(self, owner): self.geogig_dir = settings.GEOGIG_REPO + "/" + str(owner.id) if not os.path.exists(self.geogig_dir): # create repo self.repo = Repository(self.geogig_dir, init=True) self.repo.config(geogig.USER_NAME, owner.username) self.repo.config(geogig.USER_EMAIL, owner.email) else: # use existing repo self.repo = Repository(self.geogig_dir, init=False) def push(self, shp=None, commit_msg=None): """ import (may take some time!) and commit uploaded shape file in repo """ self.repo.importshp(shp) self.repo.add() self.repo.commit(message=commit_msg) def log(self): """ log """ log = self.repo.log() list_info = [] for l in log: info = {"id": l.id, "date": l.committerprettydate(), "msg": l.message} list_info.append(info) return list_info
def getClonedRepo(): repo = Repository(os.path.join(os.path.dirname(__file__), '../test/data/testrepo')) dst = getTempPath() return repo.clone(dst)
def testCreateEmptyRepo(self): repoPath = self.getTempRepoPath() Repository(repoPath, init = True)
def testImportExportInDifferentFormats(self): repopath = self.getTempFolderPath() repo = Repository(repopath, init=True) geojsonfile = os.path.join(os.path.dirname(__file__), "data", "geojson", "landuse.geojson") repo.importgeojson(geojsonfile, False, "landuse", "fid") repo.addandcommit("commit") shpfile = os.path.join(self.getTempFolderPath(), "landuse.shp") repo.exportshp(geogig.HEAD, "landuse", shpfile) repo.importshp(shpfile, False, "landuse", "fid") unstaged = repo.unstaged() self.assertEquals(0, unstaged)
def repo(self): if self._repo is None: connector = PyQtConnectorDecorator() connector.checkIsAlive() self._repo = Repository(self.path, connector) return self._repo
def connect2repo(path, remote='localhost', repo_type='local'): print 'connect 2 repo %s' % path if os.path.isdir(os.path.join(path, '.geogig')): print "Set to existing repo" try: repos = Repository(path) except GeoGigException, e: print e return repos else: if repo_type == "remote": try: repos = Repository.newrepofromclone(remote, path) except GeoGigException, e: print e print "New repo from clone" else: try: repos = Repository(path, init=True) except GeoGigException, e: print e print "New repo initialized at : %s" % path return repos def export_to_geojson(repos, filepath): for t in repos.trees: print "t: %s" % t.path
class ImportDialog(QtGui.QDialog): def __init__(self, parent, repo = None, layer = None): super(ImportDialog, self).__init__(parent) self.repo = repo self.layer = layer self.ok = False self.initGui() def initGui(self): self.setWindowTitle('Add layer to GeoGig repository') verticalLayout = QtGui.QVBoxLayout() if self.repo is None: repos = localRepos() self.repos = {r.title:r.path for r in repos} layerLabel = QtGui.QLabel('Repository') verticalLayout.addWidget(layerLabel) self.repoCombo = QtGui.QComboBox() self.repoCombo.addItems(self.repos.keys()) verticalLayout.addWidget(self.repoCombo) if self.layer is None: layerLabel = QtGui.QLabel('Layer') verticalLayout.addWidget(layerLabel) self.layerCombo = QtGui.QComboBox() layerNames = [layer.name() for layer in getVectorLayers() if layer.source().lower().endswith("shp") and not isTracked(layer)] self.layerCombo.addItems(layerNames) verticalLayout.addWidget(self.layerCombo) messageLabel = QtGui.QLabel('Message to describe this update') verticalLayout.addWidget(messageLabel) self.messageBox = QtGui.QPlainTextEdit() self.messageBox.textChanged.connect(self.messageHasChanged) verticalLayout.addWidget(self.messageBox) self.buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Cancel) self.importButton = QtGui.QPushButton("Add layer") self.importButton.clicked.connect(self.importClicked) self.importButton.setEnabled(False) self.buttonBox.addButton(self.importButton, QtGui.QDialogButtonBox.ApplyRole) self.buttonBox.rejected.connect(self.cancelPressed) verticalLayout.addWidget(self.buttonBox) self.setLayout(verticalLayout) self.resize(400, 200) def messageHasChanged(self): self.importButton.setEnabled(self.messageBox.toPlainText() != "") def importClicked(self): if self.repo is None: connector = PyQtConnectorDecorator() connector.checkIsAlive() self.repo = Repository(self.repos[self.repoCombo.currentText()], connector) if self.layer is None: text = self.layerCombo.currentText() self.layer = resolveLayer(text) source = self.layer.source() hasIdField = self.layer.dataProvider().fieldNameIndex("geogigid") != -1 if not hasIdField: autoAddId = config.getConfigValue(config.GENERAL, config.AUTO_ADD_ID) if not autoAddId: dlg = AddGeogigIdDialog(self) ok, check = dlg.exec_() if ok == QtGui.QMessageBox.No: self.close() return if check: config.setConfigValue(config.GENERAL, config.AUTO_ADD_ID, True) QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor)) addIdField(self.layer) QtGui.QApplication.restoreOverrideCursor() hasIdField = self.layer.dataProvider().fieldNameIndex("geogigid") != -1 if not hasIdField: QtGui.QMessageBox.warning(self, "Error", "Could not add 'geogigid' field to layer.\n" "Possible causes for this are:\n" "- No permission to edit the layer.\n", QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok) return # determine encoding # first look in .cpg file cpgPath = source.replace('.shp', '.cpg') if os.path.exists(cpgPath): with open(cpgPath) as f: charset = f.readline().strip('\r\n') else: # try to get encoding from provider charset = self.layer.dataProvider().encoding() if charset.lower() == 'system': # get encoding from system charset = locale.getpreferredencoding() self.repo.importshp(source, False, self.layer.name(), "geogigid", True, charset) message = self.messageBox.toPlainText() self.repo.add() try: self.repo.commit(message) except UnconfiguredUserException, e: configureUser() self.repo.commit(message) except GeoGigException, e: if "Nothing to commit" in e.args[0]: config.iface.messageBar().pushMessage("No version has been created. Repository is already up to date", level = QgsMessageBar.INFO, duration = 4) self.close() return
def _addRemote(): connector = PyQtConnectorDecorator() connector.checkIsAlive() repo = Repository(os.path.join(_tempReposPath, "repos", "local"), connector) remotePath = os.path.join(_tempReposPath, "repos", "remote") repo.addremote("remote", remotePath , "user", "pass")
class ImportDialog(QtGui.QDialog): def __init__(self, parent, repo=None, layer=None): super(ImportDialog, self).__init__(parent) self.repo = repo self.layer = layer self.ok = False self.initGui() def initGui(self): self.setWindowTitle('Add layer to GeoGig repository') verticalLayout = QtGui.QVBoxLayout() if self.repo is None: repos = localRepos() self.repos = {r.title: r.path for r in repos} layerLabel = QtGui.QLabel('Repository') verticalLayout.addWidget(layerLabel) self.repoCombo = QtGui.QComboBox() self.repoCombo.addItems(self.repos.keys()) verticalLayout.addWidget(self.repoCombo) if self.layer is None: layerLabel = QtGui.QLabel('Layer') verticalLayout.addWidget(layerLabel) self.layerCombo = QtGui.QComboBox() layerNames = [ layer.name() for layer in getVectorLayers() if layer.source().lower().endswith("shp") and not isTracked(layer) ] self.layerCombo.addItems(layerNames) verticalLayout.addWidget(self.layerCombo) messageLabel = QtGui.QLabel('Message to describe this update') verticalLayout.addWidget(messageLabel) self.messageBox = QtGui.QPlainTextEdit() self.messageBox.textChanged.connect(self.messageHasChanged) verticalLayout.addWidget(self.messageBox) self.buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Cancel) self.importButton = QtGui.QPushButton("Add layer") self.importButton.clicked.connect(self.importClicked) self.importButton.setEnabled(False) self.buttonBox.addButton(self.importButton, QtGui.QDialogButtonBox.ApplyRole) self.buttonBox.rejected.connect(self.cancelPressed) verticalLayout.addWidget(self.buttonBox) self.setLayout(verticalLayout) self.resize(400, 200) def messageHasChanged(self): self.importButton.setEnabled(self.messageBox.toPlainText() != "") def importClicked(self): if self.repo is None: connector = PyQtConnectorDecorator() connector.checkIsAlive() self.repo = Repository(self.repos[self.repoCombo.currentText()], connector) if self.layer is None: text = self.layerCombo.currentText() self.layer = resolveLayer(text) source = self.layer.source() hasIdField = self.layer.dataProvider().fieldNameIndex("geogigid") != -1 if not hasIdField: autoAddId = config.getConfigValue(config.GENERAL, config.AUTO_ADD_ID) if not autoAddId: dlg = AddGeogigIdDialog(self) ok, check = dlg.exec_() if ok == QtGui.QMessageBox.No: self.close() return if check: config.setConfigValue(config.GENERAL, config.AUTO_ADD_ID, True) QtGui.QApplication.setOverrideCursor( QtGui.QCursor(QtCore.Qt.WaitCursor)) addIdField(self.layer) QtGui.QApplication.restoreOverrideCursor() hasIdField = self.layer.dataProvider().fieldNameIndex( "geogigid") != -1 if not hasIdField: QtGui.QMessageBox.warning( self, "Error", "Could not add 'geogigid' field to layer.\n" "Possible causes for this are:\n" "- No permission to edit the layer.\n", QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok) return # determine encoding # first look in .cpg file cpgPath = source.replace('.shp', '.cpg') if os.path.exists(cpgPath): with open(cpgPath) as f: charset = f.readline().strip('\r\n') else: # try to get encoding from provider charset = self.layer.dataProvider().encoding() if charset.lower() == 'system': # get encoding from system charset = locale.getpreferredencoding() self.repo.importshp(source, False, self.layer.name(), "geogigid", True, charset) message = self.messageBox.toPlainText() self.repo.add() try: self.repo.commit(message) except UnconfiguredUserException, e: configureUser() self.repo.commit(message) except GeoGigException, e: if "Nothing to commit" in e.args[0]: config.iface.messageBar().pushMessage( "No version has been created. Repository is already up to date", level=QgsMessageBar.INFO, duration=4) self.close() return
def _repoForLayer(layer): tracking = getTrackingInfo(layer) connector = PyQtConnectorDecorator() connector.checkIsAlive() return Repository(tracking.repoFolder, connector), tracking.layername
def getClonedRepo(self): src = self.repo.url dst = self.getTempPath() shutil.copytree(src, dst) return Repository(dst)
def importClicked(self): if self.repo is None: connector = PyQtConnectorDecorator() connector.checkIsAlive() self.repo = Repository(self.repos[self.repoCombo.currentText()], connector) if self.layer is None: text = self.layerCombo.currentText() self.layer = resolveLayer(text) source = self.layer.source() hasIdField = self.layer.dataProvider().fieldNameIndex("geogigid") != -1 if not hasIdField: autoAddId = config.getConfigValue(config.GENERAL, config.AUTO_ADD_ID) if not autoAddId: dlg = AddGeogigIdDialog(self) ok, check = dlg.exec_() if ok == QtGui.QMessageBox.No: self.close() return if check: config.setConfigValue(config.GENERAL, config.AUTO_ADD_ID, True) QtGui.QApplication.setOverrideCursor( QtGui.QCursor(QtCore.Qt.WaitCursor)) addIdField(self.layer) QtGui.QApplication.restoreOverrideCursor() hasIdField = self.layer.dataProvider().fieldNameIndex( "geogigid") != -1 if not hasIdField: QtGui.QMessageBox.warning( self, "Error", "Could not add 'geogigid' field to layer.\n" "Possible causes for this are:\n" "- No permission to edit the layer.\n", QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok) return # determine encoding # first look in .cpg file cpgPath = source.replace('.shp', '.cpg') if os.path.exists(cpgPath): with open(cpgPath) as f: charset = f.readline().strip('\r\n') else: # try to get encoding from provider charset = self.layer.dataProvider().encoding() if charset.lower() == 'system': # get encoding from system charset = locale.getpreferredencoding() self.repo.importshp(source, False, self.layer.name(), "geogigid", True, charset) message = self.messageBox.toPlainText() self.repo.add() try: self.repo.commit(message) except UnconfiguredUserException, e: configureUser() self.repo.commit(message)
def createRepo(): global _repo repo = Repository(getTempRepoPath(), init = True) path = os.path.join(os.path.dirname(__file__), "data", "shp", "1", "parks.shp") repo.importshp(path) repo.addandcommit("message") path = os.path.join(os.path.dirname(__file__), "data", "shp", "2", "parks.shp") repo.importshp(path) repo.addandcommit("message_2") path = os.path.join(os.path.dirname(__file__), "data", "shp", "3", "parks.shp") repo.importshp(path) repo.addandcommit("message_3") repo.createbranch(geogig.HEAD, "conflicted") repo.createbranch(geogig.HEAD, "unconflicted") path = os.path.join(os.path.dirname(__file__), "data", "shp", "4", "parks.shp") repo.importshp(path) repo.addandcommit("message_4") repo.checkout("conflicted") path = os.path.join(os.path.dirname(__file__), "data", "shp", "5", "parks.shp") repo.importshp(path) repo.addandcommit("message_5") repo.checkout("unconflicted") path = os.path.join(os.path.dirname(__file__), "data", "shp", "6", "parks.shp") repo.importshp(path) repo.addandcommit("message_6") repo.checkout(geogig.MASTER) repo.config(geogig.USER_NAME, "user") repo.config(geogig.USER_EMAIL, "user") _repo = repo