def _checkLayerNotInRepo(): layer = layerFromName("points") tracking = getTrackingInfo(layer) assert tracking is None connector = PyQtConnectorDecorator() connector.checkIsAlive() repo = Repository(os.path.join(_tempReposPath, "repos", "pointsrepo"), connector) layers = [tree.path for tree in repo.trees] assert "points" not in layers
def _exportRepoLayers(repoFolder): repoPath = os.path.join(_tempReposPath, "repos", repoFolder) connector = PyQtConnectorDecorator() connector.checkIsAlive() repo = Repository(repoPath, connector) exportFullRepo(repo) layerPath = os.path.join(repoPath, "points.shp") layer = QgsVectorLayer(layerPath, "points", 'ogr') QgsMapLayerRegistry.instance().addMapLayers([layer], True)
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 _checkLayerInRepo(): layer = layerFromName("points") tracking = getTrackingInfo(layer) assert tracking is not None connector = PyQtConnectorDecorator() connector.checkIsAlive() repo = Repository(tracking.repoFolder, connector) layers = [tree.path for tree in repo.trees] assert "points" in layers removeTrackedLayer(layer)
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 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
def configureUser(): user = config.getConfigValue(config.GENERAL, config.USERNAME) email = config.getConfigValue(config.GENERAL, config.EMAIL) if not (user and email): configdlg = UserConfigDialog(config.iface.mainWindow()) configdlg.exec_() if configdlg.user is not None: user = configdlg.user email = configdlg.email config.setConfigValue(config.GENERAL, config.USERNAME, user) config.setConfigValue(config.GENERAL, config.EMAIL, email) else: return con = PyQtConnectorDecorator() con.configglobal(geogig.USER_NAME, user) con.configglobal(geogig.USER_EMAIL, email)
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 configureUser(): user = config.getConfigValue(config.GENERAL, config.USERNAME) email = config.getConfigValue(config.GENERAL, config.EMAIL) if not (user and email): configdlg = UserConfigDialog(config.iface.mainWindow()) configdlg.exec_() if configdlg.user is not None: user = configdlg.user email = configdlg.email config.setConfigValue(config.GENERAL, config.USERNAME, user) config.setConfigValue(config.GENERAL, config.EMAIL, email) else: return con = PyQtConnectorDecorator() con.configglobal(geogig.USER_NAME, user) con.configglobal(geogig.USER_EMAIL, email)
def repo(self): if self._repo is None: connector = PyQtConnectorDecorator() connector.checkIsAlive() self._repo = Repository(self.path, connector) return self._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 # 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 _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")
def _repoForLayer(layer): tracking = getTrackingInfo(layer) connector = PyQtConnectorDecorator() connector.checkIsAlive() return Repository(tracking.repoFolder, connector), tracking.layername
def _repoForLayer(layer): tracking = getTrackingInfo(layer) connector = PyQtConnectorDecorator() connector.checkIsAlive() return Repository(tracking.repoFolder, connector), tracking.layername
def repo(self): if self._repo is None: connector = PyQtConnectorDecorator() connector.checkIsAlive() self._repo = Repository(self.path, connector) return self._repo