public static GitService createGitService(String repositoryDirectory) throws Exception { if(repositoryDirectory != null) { if(!repositoryDirectory.endsWith(".git")) { String gitDir = FileSystemManager.getChildDirectoryIfExists(repositoryDirectory, ".git"); if(gitDir != null) { repositoryDirectory = gitDir; } else { repositoryDirectory = null; } } if(repositoryDirectory != null && FileSystemManager.isDirector(repositoryDirectory) && FileSystemManager.canRead(repositoryDirectory) && FileSystemManager.canWrite(repositoryDirectory)){ return new GitService(new FileRepository(repositoryDirectory)); } } throw new Exception("Invalid git repo"); }
private static String readCurrentCommitDate(FileRepository repo, String revision) throws IOException { DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); ObjectId rev = repo.resolve(revision); if (null == rev) return EMPTY_STRING; RevWalk rw = new RevWalk(repo); RevCommit commit = rw.parseCommit(rev); PersonIdent author = commit.getAuthorIdent(); Date commitDate = author.getWhen(); return df.format(commitDate); }
/** * Initializes the {@link FileRepository} or creates a new own if it does * not exist. */ private void initRepository() throws IOException { FileRepositoryBuilder builder = new FileRepositoryBuilder(); builder.setWorkTree(localWorkspace); repository = builder.build(); if (!new File(localWorkspace, ".git").isDirectory()) { repository.create(); repository.getConfig().setString("remote", "origin", "fetch", "+refs/heads/*:refs/remotes/origin/*"); repository.getConfig().setString("remote", "origin", "url", remoteLocation); repository.getConfig().setString("branch", watchBranch, "remote", "origin"); repository.getConfig().setString("branch", watchBranch, "merge", "refs/heads/" + watchBranch); repository.getConfig().save(); } }
@Override public CommitRef getHead() { try { if (repository == null) { initRepository(); } AnyObjectId id = repository.resolve(Constants.HEAD); RevCommit commit = new RevWalk(repository).parseCommit(id); LOGGER.debug("Resolved HEAD to commit {}", commit.getId().name()); return new GitCommitRef(commit); } catch (IOException e) { if (repository != null) { repository.close(); repository = null; } throw new ScmException(e); } }
@Override public File get(String file) { try { if (repository == null) { initRepository(); } AnyObjectId id = repository.resolve(Constants.HEAD); RevCommit commit = new RevWalk(repository).parseCommit(id); LOGGER.debug("Looking up file {} in HEAD revision", file); TreeWalk treeWalk = TreeWalk.forPath(repository, file, new AnyObjectId[] { commit.getTree() }); if (treeWalk == null) { return null; } ObjectId objectId = treeWalk.getObjectId(treeWalk.getTreeCount() - 1); if (objectId == ObjectId.zeroId()) { LOGGER.debug("File {} couldn't be found in HEAD revision", file); return null; } String fileName = getFilename(file); LOGGER.debug("Creating file from saved repository content"); File tmp = File.createTempFile(fileName, null); tmp.deleteOnExit(); OutputStream os = new FileOutputStream(tmp); os.write(repository.open(objectId).getCachedBytes()); os.close(); return tmp; } catch (Exception e) { throw new ScmException(e); } }
AnyObjectId oldHead = repository.resolve(Constants.HEAD); if (oldHead == null) { LOGGER.debug("Local repository is empty. Fetching remote repository."); repository.scanForRepoChanges(); AnyObjectId newHead = repository.resolve(Constants.HEAD); if (newHead == null) { LOGGER.debug("New HEAD of local repository doesnt exist.");
} catch (IOException e) { if (repository != null) { repository.close();
@Override public Repository openRepository() throws IOException { File rd = getRepositoryDir(); // TODO 7: should we cache r here? Who will be closing r? FileRepository r = new FileRepositoryBuilder().setWorkTree(rd).build(); if (!r.getObjectDatabase().exists()){ r.create(); try { new FilePath(rd).untarFrom(JenkowWorkflowRepository.class.getResourceAsStream("/jenkow-repository-seed.tar"),FilePath.TarCompression.NONE); } catch (InterruptedException e1) { LOGGER.log(Level.WARNING, "Seeding of jenkow-repository failed",e1); } addAndCommit(r,".","Initial import of the existing contents"); } return r; }
private static String readCurrentBranch(FileRepository repo, String revision) throws IOException { String branch = repo.getBranch(); // should not happen if (null == branch) return EMPTY_STRING; if (revision.equals(branch)) return EMPTY_STRING; return branch; }
private static String extractPeeledSha1(FileRepository repo, Ref ref) { Ref peeled = repo.peel(ref); ObjectId oid = peeled.getPeeledObjectId(); return null != oid ? oid.name() : peeled.getObjectId().name(); }
private static Map<String, String> loadTagsMap(FileRepository repo) { Map<String, Ref> refMap = repo.getTags(); Map<String, String> res = new HashMap<String, String>(refMap.size()); for (Map.Entry<String, Ref> en : refMap.entrySet()) { String sha1 = extractPeeledSha1(repo, en.getValue()); String existed = res.get(sha1); final String value; if (null == existed) { value = en.getKey(); } else { value = existed + ";" + en.getKey(); } res.put(sha1, value); } return res; }
try { ObjectId revisionObject = repo.resolve(Constants.HEAD); if (null == revisionObject) throw new IOException("Cannot read current revision from repository: " + repo); String revision = revisionObject.name(); return new BuildNumber(revision, branch, tag, parent, commitsCount, commitDate); } finally { repo.close();
@Override public File get(String file, CommitRef ref) { try { if (repository == null) { initRepository(); } AnyObjectId id = repository.resolve(ref.getStringRepresentation()); RevCommit commit = new RevWalk(repository).parseCommit(id); LOGGER.debug("Looking up file {} in revision {}", file, ref.getStringRepresentation()); TreeWalk treeWalk = TreeWalk.forPath(repository, file, new AnyObjectId[] { commit.getTree() }); if (treeWalk == null) { return null; } ObjectId objectId = treeWalk.getObjectId(treeWalk.getTreeCount() - 1); if (objectId == ObjectId.zeroId()) { return null; } String fileName = getFilename(file); LOGGER.debug("Creating file from saved repository content"); File tmp = File.createTempFile(fileName, null); tmp.deleteOnExit(); OutputStream os = new FileOutputStream(tmp); os.write(repository.open(objectId).getCachedBytes()); os.close(); return tmp; } catch (Exception e) { throw new ScmException(e); } }
} catch (IOException e) { if (repository != null) { repository.close(); repository = null;
private static String readCurrentBranch(FileRepository repo, String revision) throws IOException { String branch = repo.getBranch(); // should not happen if (null == branch) return EMPTY_STRING; if (revision.equals(branch)) return EMPTY_STRING; return branch; }
private static String extractPeeledSha1(FileRepository repo, Ref ref) { Ref peeled = repo.peel(ref); ObjectId oid = peeled.getPeeledObjectId(); return null != oid ? oid.name() : peeled.getObjectId().name(); }
private static Map<String, String> loadTagsMap(FileRepository repo) { Map<String, Ref> refMap = repo.getTags(); Map<String, String> res = new HashMap<String, String>(refMap.size()); for (Map.Entry<String, Ref> en : refMap.entrySet()) { String sha1 = extractPeeledSha1(repo, en.getValue()); String existed = res.get(sha1); final String value; if (null == existed) { value = en.getKey(); } else { value = existed + ";" + en.getKey(); } res.put(sha1, value); } return res; }
try { File f = new File(parentDirName + "/.git"); localRepo = new FileRepository(f); if (log.isDebugEnabled()) { log.debug("Local File Repo: " + f.getAbsoluteFile());
try { ObjectId revisionObject = repo.resolve(Constants.HEAD); if (null == revisionObject) throw new IOException("Cannot read current revision from repository: " + repo); String revision = revisionObject.name(); return new BuildNumber(revision, branch, tag, parent, commitsCount, commitDate); } finally { repo.close();
private static String readCurrentCommitDate(FileRepository repo, String revision, String commitDateFormat) throws IOException { DateFormat df = new SimpleDateFormat(commitDateFormat); ObjectId rev = repo.resolve(revision); if (null == rev) return EMPTY_STRING; RevWalk rw = new RevWalk(repo); RevCommit commit = rw.parseCommit(rev); PersonIdent author = commit.getAuthorIdent(); Date commitDate = author.getWhen(); return df.format(commitDate); }