Exemple #1
0
def commitLayer(layer):
    trackedLayer = getTrackingInfo(layer)
    try:
        repo = createRepository(trackedLayer.repoFolder, False)
    except Py4JConnectionException:
        QtGui.QApplication.restoreOverrideCursor()
        dlg = GatewayNotAvailableWhileEditingDialog(config.iface.mainWindow())
        dlg.exec_()
        return
    QtGui.QApplication.restoreOverrideCursor()

    if layer.dataProvider().fieldNameIndex("geogigid") == -1:
        config.iface.messageBar().pushMessage(
            "Cannot update GeoGig repository. Layer has no 'geogigid' field",
            level=QgsMessageBar.WARNING,
            duration=4)
        return

    exported, charset = exportVectorLayer(layer)
    repo.importshp(exported, False, trackedLayer.layername, "geogigid", True,
                   charset)

    unstaged = repo.difftreestats(geogig.HEAD, geogig.WORK_HEAD)
    total = 0
    for counts in unstaged.values():
        total += sum(counts)
    if total == 0:
        config.iface.messageBar().pushMessage(
            "No changes detected. Repository was already up to date",
            level=QgsMessageBar.INFO,
            duration=4)
        return

    dlg = CommitDialog(repo, config.iface.mainWindow())
    dlg.exec_()
    try:
        repo.addandcommit(dlg.getMessage())
    except UnconfiguredUserException, e:
        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
        repo.config(geogig.USER_NAME, user, True)
        repo.config(geogig.USER_EMAIL, email, True)
        repo.commit(dlg.getMessage())
def commitLayer(layer):
    trackedLayer = getTrackingInfo(layer)
    try:
        repo = createRepository(trackedLayer.repoFolder, False)
    except Py4JConnectionException:
        QtGui.QApplication.restoreOverrideCursor()
        dlg = GatewayNotAvailableWhileEditingDialog(config.iface.mainWindow())
        dlg.exec_()
        return
    QtGui.QApplication.restoreOverrideCursor()

    if layer.dataProvider().fieldNameIndex("geogigid") == -1:
        config.iface.messageBar().pushMessage("Cannot update GeoGig repository. Layer has no 'geogigid' field",
                                                  level = QgsMessageBar.WARNING, duration = 4)
        return

    exported, charset = exportVectorLayer(layer)
    repo.importshp(exported, False, trackedLayer.layername, "geogigid", True, charset)

    unstaged = repo.difftreestats(geogig.HEAD, geogig.WORK_HEAD)
    total = 0
    for counts in unstaged.values():
        total += sum(counts)
    if total == 0:
        config.iface.messageBar().pushMessage("No changes detected. Repository was already up to date",
                                              level = QgsMessageBar.INFO, duration = 4)
        return

    dlg = CommitDialog(repo, config.iface.mainWindow())
    dlg.exec_()
    try:
        repo.addandcommit(dlg.getMessage())
    except UnconfiguredUserException, e:
        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
        repo.config(geogig.USER_NAME, user, True)
        repo.config(geogig.USER_EMAIL, email, True)
        repo.commit(dlg.getMessage())
    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)