Ejemplo n.º 1
0
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    
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
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 = {}
            for user, userrepos in repos.iteritems():
                self.repos.update({ title:path
                                   for title, path in userrepos.iteritems()})
            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

        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
        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