コード例 #1
0
    def importClicked(self):
        if self.repo is None:
            self.repo = repository.repos[self.repoCombo.currentIndex()]
        if self.layer is None:
            text = self.layerCombo.currentText()
            self.layer = resolveLayer(text)

        user, email = config.getUserInfo()
        if user is None:
            self.close()
            return
        message = self.messageBox.toPlainText()

        branch = self.branchCombo.currentText()
        try:
            self.repo.importgeopkg(self.layer, branch, message, user, email, False)
            filename, layername = namesFromLayer(self.layer)
            self.repo.checkoutlayer(filename, layername, ref = branch)
            self.layer.reload()
            self.layer.triggerRepaint()
        except GeoGigException as e:
            iface.messageBar().pushMessage("Error", str(e),
                                           level=QgsMessageBar.CRITICAL,
                                           duration=5)
            self.close()
            return

        addTrackedLayer(self.layer, self.repo.url)

        self.ok = True
        iface.messageBar().pushMessage("Layer was correctly added to repository",
                                       level=QgsMessageBar.INFO,
                                       duration=5)
        self.close()
コード例 #2
0
def exportFullRepo(repo, ref=geogig.HEAD):
    trees = repo.trees
    ref = repo.revparse(ref)
    for tree in trees:
        trackedlayer = getTrackingInfoForGeogigLayer(repo.url, tree.path)
        if trackedlayer is None or not os.path.exists(trackedlayer.source):
            filepath = os.path.join(repo.url, tree.path + ".shp")
            repo.exportshp(ref, tree.path, filepath, "utf-8")
            addTrackedLayer(filepath, repo.url, tree.path, ref)
        elif trackedlayer.ref != ref:
            repo.exportshp(ref, tree.path, trackedlayer.source, "utf-8")
            setRef(trackedlayer.source, ref)
コード例 #3
0
def exportFullRepo(repo, ref = geogig.HEAD):
    trees = repo.trees
    ref = repo.revparse(ref)
    for tree in trees:
        trackedlayer = getTrackingInfoForGeogigLayer(repo.url, tree.path)
        if trackedlayer is None or not os.path.exists(trackedlayer.source):
            filepath = os.path.join(repo.url, tree.path + ".shp")
            repo.exportshp(ref, tree.path, filepath, "utf-8")
            addTrackedLayer(filepath, repo.url, tree.path, ref)
        elif trackedlayer.ref != ref:
            repo.exportshp(ref, tree.path, trackedlayer.source, "utf-8")
            setRef(trackedlayer.source, ref)
コード例 #4
0
def exportFullRepo(repo, ref = geogig.HEAD):
    reponame = nameFromRepoPath(repo.url)
    repouser = userFromRepoPath(repo.url)
    repoowner = ownerFromRepoPath(repo.url)
    trees = repo.trees
    ref = repo.revparse(ref)
    for tree in trees:
        trackedlayer = getTrackingInfoForGeogigLayer(repo.url, tree.path)
        if trackedlayer is None or not os.path.exists(trackedlayer.source):
            filepath = os.path.join(repo.url, tree.path + ".shp")
            repo.exportshp(ref, tree.path, filepath)
            addTrackedLayer(filepath, reponame, repoowner, repouser, tree.path, ref)
        elif trackedlayer.ref != ref:
            repo.exportshp(ref, tree.path, trackedlayer.source)
            setRef(trackedlayer.source, ref)
コード例 #5
0
    def importClicked(self):

        ret = QMessageBox.warning(
            config.iface.mainWindow(), 'Import warning',
            "Importing a layer will modify the original layer and might cause data loss.\n"
            "Make sure you have a backup copy of your layer before importing.\n"
            "Do you want to import the selected layer?",
            QMessageBox.Yes | QMessageBox.No)
        if ret == QMessageBox.No:
            return

        if self.repo is None:
            self.repo = repository.repos[self.repoCombo.currentIndex()]
        if self.layer is None:
            text = self.layerCombo.currentText()
            self.layer = layerFromName(text)

        user, email = config.getUserInfo()
        if user is None:
            self.close()
            return
        message = self.messageBox.toPlainText() or datetime.now().strftime(
            "%Y-%m-%d %H_%M_%S")
        branch = self.branchCombo.currentText()
        try:
            self.repo.importgeopkg(self.layer, branch, message, user, email,
                                   False)
            filename, layername = namesFromLayer(self.layer)
            self.repo.checkoutlayer(filename, layername, ref=branch)
            self.layer.reload()
            self.layer.triggerRepaint()
        except GeoGigException as e:
            iface.messageBar().pushMessage("Error",
                                           str(e),
                                           level=QgsMessageBar.CRITICAL,
                                           duration=5)
            self.close()
            return

        addTrackedLayer(self.layer, self.repo.url)

        self.ok = True
        iface.messageBar().pushMessage(
            "Layer was correctly added to repository",
            level=QgsMessageBar.INFO,
            duration=5)
        self.close()
コード例 #6
0
    def importClicked(self):

        ret = QMessageBox.warning(config.iface.mainWindow(), 'Import warning',
                "Importing a layer will modify the original layer and might cause data loss.\n"
                "Make sure you have a backup copy of your layer before importing.\n"
                "Do you want to import the selected layer?",
                QMessageBox.Yes | QMessageBox.No)
        if ret == QMessageBox.No:
            return


        if self.repo is None:
            self.repo = repository.repos[self.repoCombo.currentIndex()]
        if self.layer is None:
            text = self.layerCombo.currentText()
            self.layer = layerFromName(text)

        user, email = config.getUserInfo()
        if user is None:
            self.close()
            return
        message = self.messageBox.toPlainText() or datetime.now().strftime("%Y-%m-%d %H_%M_%S")
        branch = self.branchCombo.currentText()
        try:
            self.repo.importgeopkg(self.layer, branch, message, user, email, False)
            filename, layername = namesFromLayer(self.layer)
            self.repo.checkoutlayer(filename, layername, ref = branch)
            self.layer.reload()
            self.layer.triggerRepaint()
        except GeoGigException as e:
            iface.messageBar().pushMessage("Error", str(e),
                                           level=QgsMessageBar.CRITICAL,
                                           duration=5)
            self.close()
            return

        addTrackedLayer(self.layer, self.repo.url)

        self.ok = True
        iface.messageBar().pushMessage("Layer was correctly added to repository",
                                       level=QgsMessageBar.INFO,
                                       duration=5)
        self.close()
コード例 #7
0
def checkoutLayer(repo, layername, bbox, ref=None):
    ref = ref or repo.HEAD
    newCommitId = repo.revparse(ref)
    trackedlayer = getTrackingInfoForGeogigLayer(repo.url, layername)
    if trackedlayer is not None:
        if not os.path.exists(trackedlayer.geopkg):
            removeTrackedLayer(trackedlayer.source)
            trackedlayer = None
            filename = layerGeopackageFilename(layername, repo.title,
                                               repo.group)
            source = "%s|layername=%s" % (filename, layername)
        else:
            source = trackedlayer.source
    else:
        filename = layerGeopackageFilename(layername, repo.title, repo.group)
        source = "%s|layername=%s" % (filename, layername)

    if trackedlayer is None:
        repo.checkoutlayer(filename, layername, bbox, ref or repo.HEAD)
        addTrackedLayer(source, repo.url)
        try:
            layer = resolveLayerFromSource(source)
            iface.messageBar().pushMessage(
                "GeoGig",
                "Layer was already included in the current QGIS project",
                level=QgsMessageBar.INFO,
                duration=5)
        except WrongLayerSourceException:
            layer = loadLayerNoCrsDialog(source, layername, "ogr")
            QgsMapLayerRegistry.instance().addMapLayers([layer])
            iface.messageBar().pushMessage("GeoGig",
                                           "Layer correctly added to project",
                                           level=QgsMessageBar.INFO,
                                           duration=5)
    elif ref is not None:
        currentCommitId = getCommitId(source)
        try:
            layer = resolveLayerFromSource(source)
            wasLoaded = True
        except WrongLayerSourceException:
            layer = loadLayerNoCrsDialog(source, layername, "ogr")
            wasLoaded = False

        if newCommitId != currentCommitId:
            if hasLocalChanges(layer):
                raise HasLocalChangesError()
            filename, layername = namesFromLayer(layer)
            repo.checkoutlayer(filename, layername, bbox, ref)
            layer.reload()
            if not wasLoaded:
                QgsMapLayerRegistry.instance().addMapLayers([layer])
                iface.messageBar().pushMessage(
                    "GeoGig",
                    "Layer correctly added to project",
                    level=QgsMessageBar.INFO,
                    duration=5)
            else:
                iface.messageBar().pushMessage(
                    "GeoGig",
                    "Layer correctly updated to specified version",
                    level=QgsMessageBar.INFO,
                    duration=5)
                layer.triggerRepaint()
        else:
            if wasLoaded:
                iface.messageBar().pushMessage(
                    "GeoGig",
                    "Layer was already included in the current QGIS project",
                    level=QgsMessageBar.INFO,
                    duration=5)
            else:
                QgsMapLayerRegistry.instance().addMapLayers([layer])
                iface.messageBar().pushMessage(
                    "GeoGig",
                    "Layer correctly added to the current QGIS project",
                    level=QgsMessageBar.INFO,
                    duration=5)

    repoWatcher.repoChanged.emit(repo)
    return layer
コード例 #8
0
        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
        except:
            self.close()
            raise

        ref = self.repo.revparse(geogig.HEAD)
        addTrackedLayer(self.layer or source, self.repo.url, self.layer.name(),
                        ref)
        self.ok = True
        config.iface.messageBar().pushMessage(
            "Layer was correctly added to repository",
            level=QgsMessageBar.INFO,
            duration=4)
        self.close()

    def cancelPressed(self):
        self.close()
コード例 #9
0
                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
        except:
            self.close()
            raise

        ref = self.repo.revparse(geogig.HEAD)
        addTrackedLayer(self.layer or source, self.repo.url, self.layer.name(), ref)
        self.ok = True
        config.iface.messageBar().pushMessage("Layer was correctly added to repository",
                                                  level = QgsMessageBar.INFO, duration = 4)
        self.close()


    def cancelPressed(self):
        self.close()