def doUpdateLayer(self, dest, repo): if self.layer.dataProvider().fieldNameIndex("geogigid") == -1: iface.messageBar().pushMessage("Cannot update GeoGig repository. Layer has no 'geogigid' field", level = QgsMessageBar.WARNING, duration = 4) else: exported = exportVectorLayer(self.layer) repo.importshp(exported, False, dest, "geogigid", True) setInSync(self.layer, True)
def editingStopped(self): if not isTracked(self.layer): _logger.debug("Editing stopped for layer '%s'. Layer is not tracked" % self.layer.name()) return if not self.hasChanges: _logger.debug("Editing stopped for layer '%s' without changes" % self.layer.name()) return if self.rollback: self.rollback = False return _logger.debug("Editing stopped for layer '%s'." % self.layer.name()) trackedlayer = getTrackingInfo(self.layer) insync = trackedlayer.insync setInSync(self.layer, False) self.ensureUniqueIDs() self.hasChanges = False try: repo = createRepository(trackedlayer.repoFolder(), False) except Py4JConnectionException: _logger.debug("Could not connect to repository for updating layer '%s'" % self.layer.name()) QtGui.QApplication.restoreOverrideCursor() dlg = GatewayNotAvailableWhileEditingDialog(iface.mainWindow()) dlg.exec_() setInSync(self.layer, False) return QtGui.QApplication.restoreOverrideCursor() if insync and self.canUseSmartUpdate: try: _logger.debug("Trying smart update on layer %s and repo %s" % (self.layer.source(), trackedlayer.reponame)) self.doSmartUpdate(trackedlayer.layername, repo) except Exception, e: _logger.error(traceback.format_exc()) _logger.debug("Smart update failed. Using import update instead") self.doUpdateLayer(trackedlayer.layername, repo)
repo.addandcommit(dlg.getMessage()) except UnconfiguredUserException, e: #It should not raise this exception unless config file has been manually deleted configdlg = UserConfigDialog(iface.mainWindow()) configdlg.exec_() if configdlg.user is not None: repo.config(geogig.USER_NAME, configdlg.user) repo.config(geogig.USER_EMAIL, configdlg.email) repo.commit(dlg.getMessage()) else: return headid = repo.revparse(geogig.HEAD) setRef(self.layer, headid) iface.messageBar().pushMessage("Repository correctly updated", level = QgsMessageBar.INFO, duration = 4) setInSync(self.layer, True) def _getFid(self, feature): try: return feature['geogigid'] except: raise Exception("No ID field found in layer") def doSmartUpdate(self, dest, repo): features = {} geomField = "geom" try: ftype = repo.featuretype(geogig.HEAD, dest) for fieldName, fieldType in ftype.iteritems():