def getCommits(repo, startdate, enddate): localfolder = urlToFolder(repo.url) differ = gdiff.diff_match_patch() repoloc = Config.fsdir + 'git-repos/' + localfolder + '/' if os.path.exists(repoloc): c = pygit.Repo(repoloc) else: os.makedirs(repoloc) c = pygit.Repo.init(repoloc) c.create_remote('origin', repo.url) c.remotes.origin.fetch() c.remotes.origin.pull('master') commits = [] msgs = c.iter_commits(since=unixToGitDateFormat(startdate)) for m in msgs: if m.committed_date > enddate: continue # TODO BUG: We are unable to get a git diff of the first commit. # http://osdir.com/ml/version-control.git/2005-05/msg01309.html # http://git.661346.n2.nabble.com/git-diff-tree-against-the-root-commit-td5685272.html if not m.parents: continue c = GitCommit() alldiffs = c.getChangedTexts(m) c.loadFromSource(repo, m.message, m.committed_date, m.stats.files.keys(), m.__str__(), alldiffs) commits.append(c) return commits
def find(query, components): conn = DB.getConn() c = conn.cursor() c.execute(query, components) commitrows = c.fetchall() commitfiles = [] if commitrows: allcommitids = ",".join([str(int(commit[0])) for commit in commitrows]) #This is poor practice, but we assured ourselves the value is composed only of ints first DB.execute(c, "SELECT * from " + DB.commitfile._table + " WHERE commitid IN (" + allcommitids + ")") commitfiles = c.fetchall() DB.execute(c, "SELECT * from " + DB.commitkeyword._table + " WHERE commitid IN (" + allcommitids + ")") commitkeywords = c.fetchall() DB.execute(c, "SELECT commitid, case when length(data) < 307200 then data else 'TOOLARGE' end as data from " + DB.commitdiffs._table + " WHERE commitid IN (" + allcommitids + ")") commitdata = c.fetchall() commits = [] for i in commitrows: r = Repo() r.loadFromValues(i[DB.commit._numColumns + DB.repo.id], i[DB.commit._numColumns + DB.repo.name], i[DB.commit._numColumns + DB.repo.repotypeid], i[DB.commit._numColumns + DB.repo.url], i[DB.commit._numColumns + DB.repo.viewlink], i[DB.commit._numColumns + DB.repo.tagname], i[DB.commit._numColumns + DB.repo.tagmaturity]) files = [file[DB.commitfile.file] for file in commitfiles if file[DB.commitfile.commitid] == i[DB.commit.id]] keywords = [keyword[DB.commitkeyword.keyword] for keyword in commitkeywords if keyword[DB.commitkeyword.commitid] == i[DB.commit.id]] data = [cdata[DB.commitdiffs.data] for cdata in commitdata if cdata[DB.commitdiffs.commitid] == i[DB.commit.id]][0] if i[DB.commit._numColumns + DB.repo.repotypeid] == Repo.Type.GIT: c = GitCommit() elif i[DB.commit._numColumns + DB.repo.repotypeid] == Repo.Type.SVN: c = SVNCommit() else: c = Commit() c.loadFromDatabase(r, i, files, keywords, data) commits.append(c) return commits
def object_hash(fd, fmt, repo=None): data = fd.read() # Choose constructor depending on # object type found in header. if fmt == b'commit': obj = GitCommit(repo, data) elif fmt == b'tree': obj = GitTree(repo, data) elif fmt == b'tag': obj = GitTag(repo, data) elif fmt == b'blob': obj = GitBlob(repo, data) else: raise Exception("Unknown type %s!" % fmt) return object_write(obj, repo)
def find(query, components): conn = DB.getConn() c = conn.cursor() c.execute(query, components) commitrows = c.fetchall() commitfiles = [] if commitrows: allcommitids = ",".join( [str(int(commit[0])) for commit in commitrows]) #This is poor practice, but we assured ourselves the value is composed only of ints first DB.execute( c, "SELECT * from " + DB.commitfile._table + " WHERE commitid IN (" + allcommitids + ")") commitfiles = c.fetchall() DB.execute( c, "SELECT * from " + DB.commitkeyword._table + " WHERE commitid IN (" + allcommitids + ")") commitkeywords = c.fetchall() DB.execute( c, "SELECT commitid, case when length(data) < 307200 then data else 'TOOLARGE' end as data from " + DB.commitdiffs._table + " WHERE commitid IN (" + allcommitids + ")") commitdata = c.fetchall() commits = [] for i in commitrows: r = Repo() r.loadFromValues(i[DB.commit._numColumns + DB.repo.id], i[DB.commit._numColumns + DB.repo.name], i[DB.commit._numColumns + DB.repo.repotypeid], i[DB.commit._numColumns + DB.repo.url], i[DB.commit._numColumns + DB.repo.viewlink], i[DB.commit._numColumns + DB.repo.tagname], i[DB.commit._numColumns + DB.repo.tagmaturity]) files = [ file[DB.commitfile.file] for file in commitfiles if file[DB.commitfile.commitid] == i[DB.commit.id] ] keywords = [ keyword[DB.commitkeyword.keyword] for keyword in commitkeywords if keyword[DB.commitkeyword.commitid] == i[DB.commit.id] ] data = [ cdata[DB.commitdiffs.data] for cdata in commitdata if cdata[DB.commitdiffs.commitid] == i[DB.commit.id] ][0] if i[DB.commit._numColumns + DB.repo.repotypeid] == Repo.Type.GIT: c = GitCommit() elif i[DB.commit._numColumns + DB.repo.repotypeid] == Repo.Type.SVN: c = SVNCommit() else: c = Commit() c.loadFromDatabase(r, i, files, keywords, data) commits.append(c) return commits
from gitcommit import GitCommit from git_to_yaml import GitYaml # create a commit tag from current repo #git_commit = GitCommit('C:\\Users\\rboley\\Desktop\\git\\azure_devops\\git_to_yaml') git_commit = GitCommit('/git') commit = git_commit.new_commit_ref() # add commit to other repo's puppetfile #puppetfile_path = 'C:\\Users\\rboley\\Desktop\\Puppet-Control\puppet_File.yaml' puppetfile_path = '/control-repo/Puppetfile.yaml' git_yaml = GitYaml(puppetfile_path) git_yaml.add_commit_to_file(commit)