Ejemplo n.º 1
0
    def __init__(self, serializer=None):
        self._path = os.getenv('REPO_HOME', '.')
        self._home = os.path.join(self._path, ".onaji")
        self._null = False

        if not os.path.exists(self._home):
            os.mkdir(self._home)

        try:
            repo = open_repo(self._path)
            branch = repo.refs.read_ref('HEAD').decode('utf-8').rsplit('/',
                                                                       1)[-1]
            self._commit = open_repo(self._path).head()
            self._file = open(
                os.path.join(
                    self._home,
                    branch + '.' + self._commit.decode('utf-8') + ".csv"), 'w')
            self._writer = csv.writer(self._file)
            self._testname = None
            if serializer:
                self._serializer = serializer
            else:
                self._serializer = lambda x: quote(repr(x))
        except:
            sys.stderr.write(
                "No repository found or error creating output file. Going into null logging mode.\n"
            )
            self._null = True
Ejemplo n.º 2
0
    def __init__(self, repo_path):
        try:
            self.repo_path = repo_path

            self.repo = porcelain.open_repo(repo_path)
        except Exception:
            log.exception("GitHandler::__init__()")
            raise InvalidCommand("Opening repo failed: Please check your log")
Ejemplo n.º 3
0
def prepare_local_dir(in_dir):
    init(in_dir)
    add(in_dir, in_dir)
    commit(in_dir, "adding files")
    branch_create(in_dir, 'gh-pages')

    r = open_repo(in_dir)
    r.reset_index(r[b"refs/heads/gh-pages"].tree)
    r.refs.set_symbolic_ref(b"HEAD", b"refs/heads/gh-pages")
Ejemplo n.º 4
0
def open_or_clone_repo(rdir, rurl, no_clone):
    try:
        repo = git.open_repo(rdir)
        return repo
    except:
        repo = None

    if repo is None and no_clone is False:
        dbg('Cloning %s to %s' % (rurl, rdir))
        return git.clone(rurl, rdir)

    return repo
Ejemplo n.º 5
0
def check_branches():
    repo = porcelain.open_repo(database)
    porcelain.fetch(repo)

    head_id = repo[b'refs/heads/master'].id
    origin_id = repo[b'refs/remotes/origin/master'].id

    if head_id == origin_id:
        print("Branches are the same ...")
        return True
    else:
        print("Branches diverge ...")
        return False
Ejemplo n.º 6
0
Archivo: git.py Proyecto: flyte/bamp
def get_repo(repo_path):
    """Retrieve repository

    :param repo_path: path to .git directory
    :type repo_path: str
    :returns: loaded repository
    :rtype: dulwich.Repo

    """
    try:
        return porcelain.open_repo(repo_path)
    except NotGitRepository:
        err_msg = 'Unable to open repository.'
        logger.exception(err_msg)
        raise VCSException(err_msg)
Ejemplo n.º 7
0
 def __init__(self, name, repo, path=None, ext='md', content_meta=None,
              columns=None, **kwargs):
     try:
         self.repo = open_repo(repo)
     except NotGitRepository:
         self.repo = init(repo)
     self.path = repo
     self.ext = ext
     self.content_meta = content_meta or {}
     if path is None:
         path = name
     if path:
         self.path = os.path.join(self.path, path)
     self.path = self.path
     columns = columns or COLUMNS[:]
     super().__init__(name, columns=columns, **kwargs)
Ejemplo n.º 8
0
    def __clone_repo(self, repo_url, destination):
        """
        This is to replicate the functionality of cloning/pulling a repo
        """
        try:
            with open('/dev/null', 'wb') as devnull:
                porcelain.pull(destination,
                               repo_url,
                               outstream=devnull,
                               errstream=devnull)
                repo = porcelain.open_repo(destination)
        except dulwich.errors.NotGitRepository:
            with open('/dev/null', 'wb') as devnull:
                repo = porcelain.clone(repo_url,
                                       destination,
                                       outstream=devnull,
                                       errstream=devnull)

        remote_refs = porcelain.fetch(repo, repo_url)
        ref = f'refs/heads/{self.branch}'.encode()

        try:
            repo[ref] = remote_refs[ref]
        except KeyError:
            ref = b'refs/heads/master'
            msgs = [
                f'\nBranch {self.branch} does not exist at {repo_url}!',
                'Using "master" branch for plugin, this may not work '
                'with your RELEASE'
            ]

            for msg in msgs:
                iocage_lib.ioc_common.logit({
                    'level': 'INFO',
                    'message': msg
                },
                                            _callback=self.callback)

            repo[ref] = remote_refs[ref]

        tree = repo[ref].tree

        # Let git reflect reality
        repo.reset_index(tree)
        repo.refs.set_symbolic_ref(b'HEAD', ref)
Ejemplo n.º 9
0
    def push(self):
        QApplication.setOverrideCursor(Qt.WaitCursor)
        username = self.username.text()
        userid = self.userid.text()
        password = self.password.text()
        reponame = self.reponame.text()
        settings = QSettings(QSettings.IniFormat, QSettings.UserScope,
                             QCoreApplication.organizationName(),
                             QCoreApplication.applicationName())
        settings.setValue("github.userid", userid)
        settings.setValue("github.username", username)
        settings.setValue("github.reponame", reponame)
        os.chdir(self.site_path)

        gitpath = os.path.join(self.site_path, ".git")
        if os.path.exists(gitpath):
            repo = porcelain.open_repo(self.site_path)
        else:
            repo = porcelain.init(self.site_path)
        for r, dirs, files in os.walk(self.site_path):
            for f in files:
                p = os.path.join(r, f)[len(self.site_path) + 1:]
                if not ".git" in p:
                    porcelain.add(repo, p)
                    self.html = "<p>adding: " + p + "</p>" + self.html
                    self.browser.setHtml(self.html)
                    QCoreApplication.processEvents()
        self.html = "<p>Commiting changes</p>" + self.html
        self.browser.setHtml(self.html)
        QCoreApplication.processEvents()
        porcelain.commit(repo, b"A sample commit")

        self.html = "<p>Pushing to server</p>" + self.html
        self.browser.setHtml(self.html)
        QCoreApplication.processEvents()

        porcelain.push(
            self.site_path, "https://" + userid + ":" + password +
            "@github.com/" + username + "/" + reponame + ".git", "master")

        self.html = "<p>Ready</p>" + self.html
        self.browser.setHtml(self.html)
        QCoreApplication.processEvents()

        QApplication.restoreOverrideCursor()
Ejemplo n.º 10
0
    def clone_repository_and_import(self, repo_url):
        repo_url = repo_url.strip()
        try:
            repo_local_path = self.get_repo_local_path(repo_url)
            porcelain.pull(porcelain.open_repo(str(repo_local_path)), repo_url)
        except ValueError:
            return self.notifier.error(
                "URL incorrect", f"URL could not be parsed \"{repo_url}\"")
        except NotGitRepository:
            try:
                self.clone_repository(repo_url, repo_local_path)
            except (GitProtocolError, NotGitRepository):
                return self.notifier.error(
                    "repository not found",
                    f"git repository not found at URL {repo_url}")

        AnkiJsonImporter.import_deck_from_path(self.collection,
                                               repo_local_path)
Ejemplo n.º 11
0
    def __clone_repo(self, repo_url, destination):
        """
        This is to replicate the functionality of cloning/pulling a repo
        """
        try:
            with open('/dev/null', 'wb') as devnull:
                porcelain.pull(destination, repo_url, outstream=devnull,
                               errstream=devnull)
                repo = porcelain.open_repo(destination)
        except dulwich.errors.NotGitRepository:
            with open('/dev/null', 'wb') as devnull:
                repo = porcelain.clone(
                    repo_url, destination, outstream=devnull, errstream=devnull
                )

        remote_refs = porcelain.fetch(repo, repo_url)
        ref = f'refs/heads/{self.branch}'.encode()

        try:
            repo[ref] = remote_refs[ref]
        except KeyError:
            ref = b'refs/heads/master'
            msgs = [
                f'\nBranch {self.branch} does not exist at {repo_url}!',
                'Using "master" branch for plugin, this may not work '
                'with your RELEASE'
            ]

            for msg in msgs:
                iocage_lib.ioc_common.logit(
                    {
                        'level': 'INFO',
                        'message': msg
                    },
                    _callback=self.callback)

            repo[ref] = remote_refs[ref]

        tree = repo[ref].tree

        # Let git reflect reality
        repo.reset_index(tree)
        repo.refs.set_symbolic_ref(b'HEAD', ref)
Ejemplo n.º 12
0
def git_push_to_origin(ui, admin, file_list, message, worker_text):
    # local_appdata = os.getenv('LOCALAPPDATA')
    # credentials_file = os.path.join(os.getenv('LOCALAPPDATA'),"LaMA", "credentials","developer_credentials.txt")

    if admin == True:
        access_token = get_access_token('developer')
    else:
        access_token = get_access_token('user')

    repo = porcelain.open_repo(database)
    if admin == True:
        status = porcelain.status(repo)
        repo.stage(status.unstaged + status.untracked)
        # print(status.unstaged)
        # print(status.untracked)
        if status.unstaged == [] and status.untracked == []:
            # information_window("Es wurden keine Änderungen gefunden.")
            return False

    for file in file_list:
        file_path = os.path.join(database, file)
        porcelain.add(repo, paths=file_path)

    ui.label.setText("{} (27%)".format(worker_text))

    if admin == True:
        mode = 'Administrator'
    else:
        mode = 'User'

    porcelain.commit(repo,
                     message="New Update ({0}) - {1}".format(mode, message))
    ui.label.setText("{} (84%)".format(worker_text))
    porcelain.push(
        repo,
        "https://*****:*****@github.com/chrisiweb/lama_latest_update.git".
        format(access_token), "master")
    ui.label.setText("{} (100%)".format(worker_text))

    return True
Ejemplo n.º 13
0
 def open_repo(self):
     try:
         return porcelain.open_repo(self.repo_path)
     except NotGitRepository:
         return porcelain.init(self.repo_path)
Ejemplo n.º 14
0
def on_modified(event):
    try:
        log(f"hey buddy, {event.src_path} has been modified")
        #log(aaa)
        #log(os.getcwd())
        os.chdir(path)
        log(os.getcwd())
        #log("curr dir changed")
        #os.system("git status")
        basename=os.path.basename(path)
        if os.name == 'nt':
            log("G:/My Drive/sync/company_notebook/"+basename)
            if os.path.isdir("G:/My Drive/sync/company_notebook/"+basename):
                log("its a dir")
                os.system("rd /s /q \"G:/My Drive/sync/company_notebook/"+basename+"\"")
                log("deleted")
            os.system("mkdir \"G:/My Drive/sync/company_notebook/"+basename+"\"")
            log("gdrive dir created")
            os.system("git status > \"G:/My Drive/sync/company_notebook/"+basename+"/status\"")
            log("status loged")
            os.system("git diff > \"G:/My Drive/sync/company_notebook/"+basename+"/diff\"")
            log("diff loged")
            
            repo=porcelain.open_repo(path)
            log("repo has been set")
            status=porcelain.status(repo)
            log("status got")
            log('staged - added:', status.staged['add'], 'modified:', status.staged['modify'], 'deleted: ', status.staged['delete'])     
            log('unstaged: ', status.unstaged) 
            #log 'untracked: ', status.untracked
            #untracked not working on version 0.9.7
            #log 'untracked: '+str(repo.untracked_files)
            log('untracked: ', status.untracked)
            for file in status.untracked:
                #>xcopy /s python\ftp_upload_file.pyc "G:\My Drive\sync\company_notebook\scripts\python\"
                if os.path.dirname(file) == '':
                    log(    "xcopy /s \""+file+"\" \"G:\\My Drive\\sync\\company_notebook\\"+basename+"\\untracked\\\"")
                    os.system("cmd.exe /c xcopy /s \""+file+"\" \"G:\\My Drive\\sync\\company_notebook\\"+basename+"\\untracked\\\"")
                else:
                    log(    "xcopy /s \""+file+"\" \"G:\\My Drive\\sync\\company_notebook\\"+basename+"\\untracked\\"+os.path.dirname(file)+"\\\"")            
                    os.system("cmd.exe /c xcopy /s \""+file+"\" \"G:\\My Drive\\sync\\company_notebook\\"+basename+"\\untracked\\"+os.path.dirname(file)+"\\\"")           
        else : 
            os.system("rclone purge \"mobile_rclone:/sync/private_mobile/"+basename+"\"")
            os.system("rclone mkdir \"mobile_rclone:/sync/private_mobile/"+basename+"\"")
            os.system("rclone mkdir \"mobile_rclone:/sync/private_mobile/"+basename+"/untracked\"")
            os.system("mkdir \"../"+basename+"_tmp\"")
            os.system("git status > \"../"+basename+"_tmp/status\"")
            os.system("git diff   > \"../"+basename+"_tmp/diff\"")
            os.system("rclone copy ../"+basename+"_tmp/diff   \"mobile_rclone:/sync/private_mobile/"+basename+"/\"")
            os.system("rclone copy ../"+basename+"_tmp/status \"mobile_rclone:/sync/private_mobile/"+basename+"/\"")
            os.system("rm -rf \"../"+basename+"_tmp\"")
            
            repo=porcelain.open_repo(path)
            status=porcelain.status(repo)
            log('staged - added:', status.staged['add'], 'modified:', status.staged['modify'], 'deleted: ', status.staged['delete'])     
            log('unstaged: ', status.unstaged) 
            #log 'untracked: ', status.untracked
            #untracked not working on version 0.9.7
            #log 'untracked: '+str(repo.untracked_files)
            log('untracked: ', status.untracked)
            for file in status.untracked:
                #>xcopy /s python\ftp_upload_file.pyc "G:\My Drive\sync\company_notebook\scripts\python\"
                log("rclone copy \""+file+"\" \"mobile_rclone:/sync/private_mobile/"+basename+"/untracked/"+os.path.dirname(file)+"\"")
                os.system("rclone copy \""+file+"\" \"mobile_rclone:/sync/private_mobile/"+basename+"/untracked/"+os.path.dirname(file)+"\"")
                #log(    "xcopy /s \""+file+"\" \"G:\\My Drive\\sync\\company_notebook\\"+basename+"\\"+os.path.dirname(file)+"\\\"")
                #os.system("xcopy /s \""+file+"\" \"G:\\My Drive\\sync\\company_notebook\\"+basename+"\\"+os.path.dirname(file)+"\\\"")
        
        #shutil.copy(event.src_path, "G:/My Drive/sync")
        log("ready: ", str(datetime.now()))
    except BaseException:
        os._exit(1)    
Ejemplo n.º 15
0
def check_for_changes(database):
    repo = porcelain.open_repo(database)
    status = porcelain.status(repo)
    return status.unstaged, status.untracked