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
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")
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")
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
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
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)
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)
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)
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()
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)
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)
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
def open_repo(self): try: return porcelain.open_repo(self.repo_path) except NotGitRepository: return porcelain.init(self.repo_path)
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)
def check_for_changes(database): repo = porcelain.open_repo(database) status = porcelain.status(repo) return status.unstaged, status.untracked