Example usage for org.eclipse.jgit.lib TreeFormatter append

List of usage examples for org.eclipse.jgit.lib TreeFormatter append

Introduction

In this page you can find the example usage for org.eclipse.jgit.lib TreeFormatter append.

Prototype

public void append(byte[] name, FileMode mode, AnyObjectId id) 

Source Link

Document

Append any entry to the tree.

Usage

From source file:com.gitblit.utils.JGitUtils.java

License:Apache License

/**
 * Create an orphaned branch in a repository.
 *
 * @param repository/* w  ww.  j  av  a 2s.co  m*/
 * @param branchName
 * @param author
 *            if unspecified, Gitblit will be the author of this new branch
 * @return true if successful
 */
public static boolean createOrphanBranch(Repository repository, String branchName, PersonIdent author) {
    boolean success = false;
    String message = "Created branch " + branchName;
    if (author == null) {
        author = new PersonIdent("Gitblit", "gitblit@localhost");
    }
    try {
        ObjectInserter odi = repository.newObjectInserter();
        try {
            // Create a blob object to insert into a tree
            ObjectId blobId = odi.insert(Constants.OBJ_BLOB, message.getBytes(Constants.CHARACTER_ENCODING));

            // Create a tree object to reference from a commit
            TreeFormatter tree = new TreeFormatter();
            tree.append(".branch", FileMode.REGULAR_FILE, blobId);
            ObjectId treeId = odi.insert(tree);

            // Create a commit object
            CommitBuilder commit = new CommitBuilder();
            commit.setAuthor(author);
            commit.setCommitter(author);
            commit.setEncoding(Constants.CHARACTER_ENCODING);
            commit.setMessage(message);
            commit.setTreeId(treeId);

            // Insert the commit into the repository
            ObjectId commitId = odi.insert(commit);
            odi.flush();

            RevWalk revWalk = new RevWalk(repository);
            try {
                RevCommit revCommit = revWalk.parseCommit(commitId);
                if (!branchName.startsWith("refs/")) {
                    branchName = "refs/heads/" + branchName;
                }
                RefUpdate ru = repository.updateRef(branchName);
                ru.setNewObjectId(commitId);
                ru.setRefLogMessage("commit: " + revCommit.getShortMessage(), false);
                Result rc = ru.forceUpdate();
                switch (rc) {
                case NEW:
                case FORCED:
                case FAST_FORWARD:
                    success = true;
                    break;
                default:
                    success = false;
                }
            } finally {
                revWalk.close();
            }
        } finally {
            odi.close();
        }
    } catch (Throwable t) {
        error(t, repository, "Failed to create orphan branch {1} in repository {0}", branchName);
    }
    return success;
}

From source file:com.microsoft.gittf.core.tasks.CreateCommitTask.java

License:Open Source License

private ObjectId createTree(final ObjectInserter repositoryInserter,
        final Map<CommitTreePath, CommitTreeEntry> tree) throws IOException {
    if (tree.isEmpty()) {
        return createEmptyTree(repositoryInserter);
    }/*from w ww.  j  ava2  s  . c o m*/

    TreeFormatter treeFormatter = new TreeFormatter();

    for (Entry<CommitTreePath, CommitTreeEntry> entry : tree.entrySet()) {
        String name = entry.getKey().getName();
        FileMode mode = entry.getValue().getFileMode();
        ObjectId objectId = entry.getValue().getObjectID();

        treeFormatter.append(name, mode, objectId);
    }

    return treeFormatter.insertTo(repositoryInserter);
}

From source file:com.palantir.gerrit.gerritci.servlets.JobsServlet.java

License:Apache License

public Map<String, Map<String, String>> parseJobRequest(HttpServletRequest req, String projectName)
        throws JsonSyntaxException, IOException, NoSuchProjectException, NoFilepatternException,
        GitAPIException {//ww w. ja va  2s  . c om
    Map<String, Map<String, String>> jobToParams = new HashMap<String, Map<String, String>>();

    File projectConfigDirectory = new File(sitePaths.etc_dir, projectName);
    if (!projectConfigDirectory.exists())
        projectConfigDirectory.mkdir();
    File projectConfigFile = new File(projectConfigDirectory, "created_jobs");
    if (!projectConfigFile.exists())
        projectConfigFile.createNewFile();

    JsonObject requestBody = (JsonObject) (new JsonParser()).parse(CharStreams.toString(req.getReader()));

    // get number of jobs
    // If all jobs are deleted, we must purge jobs
    int numOfJobs = requestBody.get("items").getAsJsonArray().size();

    ArrayList<String> receivedJobNames = new ArrayList<String>();

    if (numOfJobs < 1) {
        ArrayList<String> deletedJobs = updateProjectJobFiles(projectConfigFile, projectConfigDirectory,
                receivedJobNames);
        for (String deleted : deletedJobs) {
            jobToParams.put(deleted, null);
        }
        return jobToParams;
    }

    CurrentUser currentUser = this.projectControlFactory.controlFor(new NameKey(projectName)).getCurrentUser();
    String gitPath = getGitPath(sitePaths);
    File gitDir = new File(gitPath, projectName + ".git");
    Repository repository = new FileRepositoryBuilder().setGitDir(gitDir).build();
    ObjectInserter objectInserter = repository.newObjectInserter();
    HashMap<String, ObjectId> jobsToIds = new HashMap<String, ObjectId>();
    // assign file name and append to tree
    TreeFormatter treeFormatter = new TreeFormatter();
    // for each received job, create or rewrite its config file and add to
    // jobToParams
    for (int i = 0; i < numOfJobs; i++) {
        JsonObject jobObject = requestBody.get("items").getAsJsonArray().get(i).getAsJsonObject();
        String jobName = jobObject.get("jobName").toString();
        //Remove leading and trailing quotations ex. "jobname" becomes jobname
        jobName = jobName.substring(1, jobName.length() - 1);
        receivedJobNames.add(jobName);
        String type = jobObject.get("jobType").toString();
        type = type.substring(1, type.length() - 1);
        int numOfParams = jobObject.get("items").getAsJsonArray().size();
        JsonArray paramsArray = jobObject.get("items").getAsJsonArray();
        FileBasedConfig jobConfig = makeJobConfigFile(projectConfigDirectory, jobName, currentUser);
        Map<String, String> parsedParams = new HashMap<String, String>();
        parsedParams.put("projectName", projectName);
        for (int j = 0; j < numOfParams; j++) {
            String field = paramsArray.get(j).getAsJsonObject().get("field").toString();
            field = field.substring(1, field.length() - 1);
            String value = paramsArray.get(j).getAsJsonObject().get("value").toString();
            value = value.substring(1, value.length() - 1);
            parsedParams.put(field, value);
            // update jobconfig files
            jobConfig.setString("jobType", type, field, value);
        }
        jobConfig.save();
        jobsToIds.put(jobName, createGitFileId(repository, jobConfig, objectInserter, jobName));
        jobToParams.put(jobName, parsedParams);
    }
    for (String jobName : jobsToIds.keySet()) {
        treeFormatter.append(jobName + ".config", FileMode.REGULAR_FILE, jobsToIds.get(jobName));
    }
    ObjectId treeId = objectInserter.insert(treeFormatter);
    objectInserter.flush();
    updateProjectRef(treeId, objectInserter, repository, currentUser);
    // update or create project files for all jobs
    ArrayList<String> deletedJobs = updateProjectJobFiles(projectConfigFile, projectConfigDirectory,
            receivedJobNames);
    for (String deleted : deletedJobs) {
        jobToParams.put(deleted, null);
    }
    // returns map of job name to params
    return jobToParams;
}

From source file:org.kuali.student.git.model.tree.GitTreeNodeData.java

License:Educational Community License

public ObjectId buildTree(ObjectInserter inserter) throws IOException {

    log.debug("buildTree: starting");

    if (!isDirty() && originalTreeObjectId != null) {

        return originalTreeObjectId;
    }//ww  w .j  a v a 2s. c  o  m

    // else we need to recompute the tree at this level.

    TreeFormatter tree = new TreeFormatter();

    List<JGitTreeData> treeDataList = new ArrayList<JGitTreeData>();

    for (Map.Entry<String, ObjectId> entry : this.blobReferences.entrySet()) {
        String name = entry.getKey();
        ObjectId sha1 = entry.getValue();

        treeDataList.add(new JGitTreeData(name, FileMode.REGULAR_FILE, sha1));

        log.debug(String.format("added entry (name=%s, sha1=%s", name, sha1));

    }

    for (Map.Entry<String, GitTreeNodeData> entry : this.subTreeReferences.entrySet()) {

        String name = entry.getKey();
        GitTreeNodeData nodeData = entry.getValue();

        ObjectId subTreeId = nodeData.buildTree(inserter);

        treeDataList.add(new JGitTreeData(name, FileMode.TREE, subTreeId));

        log.debug(String.format("added tree (name=%s, sha1=%s", name, subTreeId));
    }

    /*
     * Compare the string sort vs byte sort
     */

    Collections.sort(treeDataList, JGitTreeData.GIT_SORT_ORDERING);

    for (JGitTreeData treeData : treeDataList) {

        tree.append(treeData.getName(), treeData.getFileMode(), treeData.getObjectId());
    }

    log.debug("buildTree: finished");

    return inserter.insert(tree);
}

From source file:org.kuali.student.git.model.tree.utils.JGitTreeUtils.java

License:Educational Community License

public static ObjectId createTree(List<JGitTreeData> data, ObjectInserter inserter) throws IOException {

    TreeFormatter tf = new TreeFormatter();

    Collections.sort(data, JGitTreeData.GIT_SORT_ORDERING);

    for (JGitTreeData treeData : data) {

        tf.append(treeData.getName(), treeData.getFileMode(), treeData.getObjectId());
    }/*w  ww  .java2 s.  com*/

    ObjectId treeId = inserter.insert(tf);

    return treeId;

}

From source file:org.kuali.student.git.model.utils.GitTestUtils.java

License:Educational Community License

public static void createBranch(Repository repository, String branchName, String fileName, String fileContent)
        throws IOException, BranchRefExistsException {

    ObjectInserter inserter = repository.newObjectInserter();

    // store the blob
    ObjectId blobId = inserter.insert(Constants.OBJ_BLOB, fileContent.getBytes());

    // create the tree
    TreeFormatter tf = new TreeFormatter();

    tf.append(fileName, FileMode.REGULAR_FILE, blobId);

    ObjectId treeId = inserter.insert(tf);

    // make the commit
    CommitBuilder cb = new CommitBuilder();

    PersonIdent pi;/*from  w  w  w .  jav a2s.  c om*/
    cb.setAuthor(pi = new PersonIdent("admin", "admin@kuali.org"));

    cb.setCommitter(pi);

    cb.setMessage("committed " + fileName);

    cb.setTreeId(treeId);

    cb.setEncoding("UTF-8");

    // save the branch

    ObjectId commit = inserter.insert(cb);

    GitRefUtils.createBranch(repository, branchName, commit);

    inserter.flush();
    inserter.release();
}

From source file:org.moxie.utils.JGitUtils.java

License:Apache License

/**
 * Create an orphaned branch in a repository.
 * //  w w w .j a v a 2  s  .  c  o  m
 * @param repository
 * @param branchName
 * @param author
 *            if unspecified, Moxie will be the author of this new branch
 * @return true if successful
 */
public static boolean createOrphanBranch(Repository repository, String branchName, PersonIdent author) {
    boolean success = false;
    String message = "Created branch " + branchName;
    if (author == null) {
        author = new PersonIdent("Moxie", "moxie@localhost");
    }
    try {
        ObjectInserter odi = repository.newObjectInserter();
        try {
            // Create a blob object to insert into a tree
            ObjectId blobId = odi.insert(Constants.OBJ_BLOB, message.getBytes(Constants.CHARACTER_ENCODING));

            // Create a tree object to reference from a commit
            TreeFormatter tree = new TreeFormatter();
            tree.append("NEWBRANCH", FileMode.REGULAR_FILE, blobId);
            ObjectId treeId = odi.insert(tree);

            // Create a commit object
            CommitBuilder commit = new CommitBuilder();
            commit.setAuthor(author);
            commit.setCommitter(author);
            commit.setEncoding(Constants.CHARACTER_ENCODING);
            commit.setMessage(message);
            commit.setTreeId(treeId);

            // Insert the commit into the repository
            ObjectId commitId = odi.insert(commit);
            odi.flush();

            RevWalk revWalk = new RevWalk(repository);
            try {
                RevCommit revCommit = revWalk.parseCommit(commitId);
                if (!branchName.startsWith("refs/")) {
                    branchName = "refs/heads/" + branchName;
                }
                RefUpdate ru = repository.updateRef(branchName);
                ru.setNewObjectId(commitId);
                ru.setRefLogMessage("commit: " + revCommit.getShortMessage(), false);
                Result rc = ru.forceUpdate();
                switch (rc) {
                case NEW:
                case FORCED:
                case FAST_FORWARD:
                    success = true;
                    break;
                default:
                    success = false;
                }
            } finally {
                revWalk.release();
            }
        } finally {
            odi.release();
        }
    } catch (Throwable t) {
        t.printStackTrace();
    }
    return success;
}

From source file:playRepository.BareCommit.java

License:Apache License

private TreeFormatter newTreeWith(String fileName, ObjectId fileObjectId) {
    TreeFormatter formatter = new TreeFormatter();
    formatter.append(fileName, FileMode.REGULAR_FILE, fileObjectId);
    return formatter;
}

From source file:playRepository.BareCommit.java

License:Apache License

private TreeFormatter rebuildExistingTreeWith(String fileName, ObjectId fileObjectId) throws IOException {
    TreeFormatter formatter = new TreeFormatter();
    CanonicalTreeParser treeParser = getCanonicalTreeParser(this.repository);

    boolean isInsertedInTree = false;
    while (!treeParser.eof()) {
        String entryName = new String(treeParser.getEntryPathBuffer(), 0, treeParser.getEntryPathLength(),
                Config.getCharset());//from ww w . j  a  va2 s  .c  o  m
        String nameForComparison = entryName;

        if (treeParser.getEntryFileMode() == FileMode.TREE) {
            nameForComparison = entryName.concat("/"); //for tree ordering comparison
        }
        if (nameForComparison.compareTo(fileName) == 0 && isInsertedInTree == false) {
            formatter.append(fileName, FileMode.REGULAR_FILE, fileObjectId);
            isInsertedInTree = true;
        } else if (nameForComparison.compareTo(fileName) > 0 && isInsertedInTree == false) {
            formatter.append(fileName, FileMode.REGULAR_FILE, fileObjectId);
            formatter.append(entryName.getBytes(Config.getCharset()), treeParser.getEntryFileMode(),
                    treeParser.getEntryObjectId());
            isInsertedInTree = true;
        } else {
            formatter.append(entryName.getBytes(Config.getCharset()), treeParser.getEntryFileMode(),
                    treeParser.getEntryObjectId());
        }

        treeParser = treeParser.next();
    }
    if (!isInsertedInTree) {
        formatter.append(fileName, FileMode.REGULAR_FILE, fileObjectId);
    }
    return formatter;
}

From source file:svnserver.repository.git.GitCreateMode.java

License:GNU General Public License

@NotNull
private static ObjectId createFirstRevision(@NotNull Repository repository) throws IOException {
    final ObjectInserter inserter = repository.newObjectInserter();
    // Create commit tree.
    final TreeFormatter rootBuilder = new TreeFormatter();
    rootBuilder.append(".gitattributes", FileMode.REGULAR_FILE, insertFile(inserter, "example/_gitattributes"));
    new ObjectChecker().checkTree(rootBuilder.toByteArray());
    final ObjectId rootId = inserter.insert(rootBuilder);
    // Create first commit with message.
    final CommitBuilder commitBuilder = new CommitBuilder();
    commitBuilder.setAuthor(new PersonIdent("", "", 0, 0));
    commitBuilder.setCommitter(new PersonIdent("", "", 0, 0));
    commitBuilder.setMessage("Initial commit");
    commitBuilder.setTreeId(rootId);/*from   w  ww.  j  av  a 2 s .  co m*/
    final ObjectId commitId = inserter.insert(commitBuilder);
    inserter.flush();
    return commitId;
}