Package org.eclipse.jgit.dircache

Examples of org.eclipse.jgit.dircache.DirCacheBuilder


  public void testTrivialTwoWay_conflictSubtreeChange() throws Exception {
    final DirCache treeB = db.readDirCache();
    final DirCache treeO = db.readDirCache();
    final DirCache treeT = db.readDirCache();
    {
      final DirCacheBuilder b = treeB.builder();
      final DirCacheBuilder o = treeO.builder();
      final DirCacheBuilder t = treeT.builder();

      b.add(makeEntry("d/o", FileMode.REGULAR_FILE));
      b.add(makeEntry("d/t", FileMode.REGULAR_FILE));

      o.add(makeEntry("d/o", FileMode.REGULAR_FILE));
      o.add(makeEntry("d/t", FileMode.REGULAR_FILE, "o !"));

      t.add(makeEntry("d/o", FileMode.REGULAR_FILE, "t !"));
      t.add(makeEntry("d/t", FileMode.REGULAR_FILE, "t !"));

      b.finish();
      o.finish();
      t.finish();
    }

    final ObjectInserter ow = db.newObjectInserter();
    final ObjectId b = commit(ow, treeB, new ObjectId[] {});
    final ObjectId o = commit(ow, treeO, new ObjectId[] { b });
View Full Code Here


  public void testTrivialTwoWay_leftDFconflict1() throws Exception {
    final DirCache treeB = db.readDirCache();
    final DirCache treeO = db.readDirCache();
    final DirCache treeT = db.readDirCache();
    {
      final DirCacheBuilder b = treeB.builder();
      final DirCacheBuilder o = treeO.builder();
      final DirCacheBuilder t = treeT.builder();

      b.add(makeEntry("d/o", FileMode.REGULAR_FILE));
      b.add(makeEntry("d/t", FileMode.REGULAR_FILE));

      o.add(makeEntry("d", FileMode.REGULAR_FILE));

      t.add(makeEntry("d/o", FileMode.REGULAR_FILE));
      t.add(makeEntry("d/t", FileMode.REGULAR_FILE, "t !"));

      b.finish();
      o.finish();
      t.finish();
    }

    final ObjectInserter ow = db.newObjectInserter();
    final ObjectId b = commit(ow, treeB, new ObjectId[] {});
    final ObjectId o = commit(ow, treeO, new ObjectId[] { b });
View Full Code Here

  public void testTrivialTwoWay_rightDFconflict1() throws Exception {
    final DirCache treeB = db.readDirCache();
    final DirCache treeO = db.readDirCache();
    final DirCache treeT = db.readDirCache();
    {
      final DirCacheBuilder b = treeB.builder();
      final DirCacheBuilder o = treeO.builder();
      final DirCacheBuilder t = treeT.builder();

      b.add(makeEntry("d/o", FileMode.REGULAR_FILE));
      b.add(makeEntry("d/t", FileMode.REGULAR_FILE));

      o.add(makeEntry("d/o", FileMode.REGULAR_FILE));
      o.add(makeEntry("d/t", FileMode.REGULAR_FILE, "o !"));

      t.add(makeEntry("d", FileMode.REGULAR_FILE));

      b.finish();
      o.finish();
      t.finish();
    }

    final ObjectInserter ow = db.newObjectInserter();
    final ObjectId b = commit(ow, treeB, new ObjectId[] {});
    final ObjectId o = commit(ow, treeO, new ObjectId[] { b });
View Full Code Here

  public void testTrivialTwoWay_leftDFconflict2() throws Exception {
    final DirCache treeB = db.readDirCache();
    final DirCache treeO = db.readDirCache();
    final DirCache treeT = db.readDirCache();
    {
      final DirCacheBuilder b = treeB.builder();
      final DirCacheBuilder o = treeO.builder();
      final DirCacheBuilder t = treeT.builder();

      b.add(makeEntry("d", FileMode.REGULAR_FILE));

      o.add(makeEntry("d", FileMode.REGULAR_FILE, "o !"));

      t.add(makeEntry("d/o", FileMode.REGULAR_FILE));

      b.finish();
      o.finish();
      t.finish();
    }

    final ObjectInserter ow = db.newObjectInserter();
    final ObjectId b = commit(ow, treeB, new ObjectId[] {});
    final ObjectId o = commit(ow, treeO, new ObjectId[] { b });
View Full Code Here

  public void testTrivialTwoWay_rightDFconflict2() throws Exception {
    final DirCache treeB = db.readDirCache();
    final DirCache treeO = db.readDirCache();
    final DirCache treeT = db.readDirCache();
    {
      final DirCacheBuilder b = treeB.builder();
      final DirCacheBuilder o = treeO.builder();
      final DirCacheBuilder t = treeT.builder();

      b.add(makeEntry("d", FileMode.REGULAR_FILE));

      o.add(makeEntry("d/o", FileMode.REGULAR_FILE));

      t.add(makeEntry("d", FileMode.REGULAR_FILE, "t !"));

      b.finish();
      o.finish();
      t.finish();
    }

    final ObjectInserter ow = db.newObjectInserter();
    final ObjectId b = commit(ow, treeB, new ObjectId[] {});
    final ObjectId o = commit(ow, treeO, new ObjectId[] { b });
View Full Code Here

    writer.print("content b");
    writer.close();

    ObjectInserter newObjectInserter = db.newObjectInserter();
    DirCache dc = db.lockDirCache();
    DirCacheBuilder builder = dc.builder();

    addEntryToBuilder("b.txt", file2, newObjectInserter, builder, 0);
    addEntryToBuilder("a.txt", file, newObjectInserter, builder, 1);

    writer = new PrintWriter(file);
    writer.print("other content");
    writer.close();
    addEntryToBuilder("a.txt", file, newObjectInserter, builder, 3);

    writer = new PrintWriter(file);
    writer.print("our content");
    writer.close();
    addEntryToBuilder("a.txt", file, newObjectInserter, builder, 2)
        .getObjectId();

    builder.commit();

    assertEquals(
        "[a.txt, mode:100644, stage:1, sha1:6b584e8ece562ebffc15d38808cd6b98fc3d97ea]" +
        "[a.txt, mode:100644, stage:2, sha1:b9f89ff733bdaf49e02711535867bb821f9db55e]" +
        "[a.txt, mode:100644, stage:3, sha1:4f41554f6e0045ef53848fc0c3f33b6a9abc24a9]" +
View Full Code Here

    final DirCache treeB = db.readDirCache();
    final DirCache treeO = db.readDirCache();
    final DirCache treeP = db.readDirCache();
    final DirCache treeT = db.readDirCache();
    {
      final DirCacheBuilder b = treeB.builder();
      final DirCacheBuilder o = treeO.builder();
      final DirCacheBuilder p = treeP.builder();
      final DirCacheBuilder t = treeT.builder();

      b.add(makeEntry("a", FileMode.REGULAR_FILE));

      o.add(makeEntry("a", FileMode.REGULAR_FILE));
      o.add(makeEntry("o", FileMode.REGULAR_FILE));

      p.add(makeEntry("a", FileMode.REGULAR_FILE, "q"));
      p.add(makeEntry("p-fail", FileMode.REGULAR_FILE));

      t.add(makeEntry("a", FileMode.REGULAR_FILE));
      t.add(makeEntry("t", FileMode.REGULAR_FILE));

      b.finish();
      o.finish();
      p.finish();
      t.finish();
    }

    final ObjectInserter ow = db.newObjectInserter();
    final ObjectId B = commit(ow, treeB, new ObjectId[] {});
    final ObjectId O = commit(ow, treeO, new ObjectId[] { B });
View Full Code Here

  @Override
  protected void run() throws Exception {
    root = db.getWorkTree();

    final DirCache dirc = db.lockDirCache();
    final DirCacheBuilder edit = dirc.builder();

    final TreeWalk walk = new TreeWalk(db);
    walk.reset(); // drop the first empty tree, which we do not need here
    walk.setRecursive(true);
    walk.setFilter(paths);
    walk.addTree(new DirCacheBuildIterator(edit));

    while (walk.next()) {
      final File path = new File(root, walk.getPathString());
      final FileMode mode = walk.getFileMode(0);
      if (mode.getObjectType() == Constants.OBJ_BLOB) {
        // Deleting a blob is simply a matter of removing
        // the file or symlink named by the tree entry.
        delete(path);
      }
    }

    edit.commit();
  }
View Full Code Here

    try {
      dc = repo.lockDirCache();
      ObjectWriter ow = new ObjectWriter(repo);
      DirCacheIterator c;

      DirCacheBuilder builder = dc.builder();
      final TreeWalk tw = new TreeWalk(repo);
      tw.reset();
      tw.addTree(new DirCacheBuildIterator(builder));
      if (workingTreeIterator == null)
        workingTreeIterator = new FileTreeIterator(repo);
      tw.addTree(workingTreeIterator);
      tw.setRecursive(true);
      if (!addAll)
        tw.setFilter(PathFilterGroup.createFromStrings(filepatterns));

      String lastAddedFile = null;

      while (tw.next()) {
        String path = tw.getPathString();

        final File file = new File(repo.getWorkTree(), path);
        WorkingTreeIterator f = tw.getTree(1, WorkingTreeIterator.class);
        if (tw.getTree(0, DirCacheIterator.class) == null &&
            f != null && f.isEntryIgnored()) {
          // file is not in index but is ignored, do nothing
        }
        // In case of an existing merge conflict the
        // DirCacheBuildIterator iterates over all stages of
        // this path, we however want to add only one
        // new DirCacheEntry per path.
        else if (!(path.equals(lastAddedFile))) {
          if (!(update && tw.getTree(0, DirCacheIterator.class) == null)) {
            if (f != null) { // the file exists
              DirCacheEntry entry = new DirCacheEntry(path);
              entry.setLength((int)f.getEntryLength());
              entry.setLastModified(f.getEntryLastModified());
              entry.setFileMode(f.getEntryFileMode());
              entry.setObjectId(ow.writeBlob(file));

              builder.add(entry);
              lastAddedFile = path;
            } else if (!update){
              c = tw.getTree(0, DirCacheIterator.class);
              builder.add(c.getDirCacheEntry());
            }
          }
        }
      }
      builder.commit();
      setCallable(false);
    } catch (IOException e) {
      throw new JGitInternalException(
          JGitText.get().exceptionCaughtDuringExecutionOfAddCommand, e);
    } finally {
View Full Code Here

    DirCacheEditor dcEditor = index.editor();

    // get DirCacheBuilder for newly created in-core index to build a
    // temporary index for this commit
    DirCache inCoreIndex = DirCache.newInCore();
    DirCacheBuilder dcBuilder = inCoreIndex.builder();

    onlyProcessed = new boolean[only.size()];
    boolean emptyCommit = true;

    TreeWalk treeWalk = new TreeWalk(repo);
    int dcIdx = treeWalk.addTree(new DirCacheIterator(index));
    int fIdx = treeWalk.addTree(new FileTreeIterator(repo));
    int hIdx = -1;
    if (headId != null)
      hIdx = treeWalk.addTree(new RevWalk(repo).parseTree(headId));
    treeWalk.setRecursive(true);

    while (treeWalk.next()) {
      String path = treeWalk.getPathString();
      // check if current entry's path matches a specified path
      int pos = lookupOnly(path);

      CanonicalTreeParser hTree = null;
      if (hIdx != -1)
        hTree = treeWalk.getTree(hIdx, CanonicalTreeParser.class);

      if (pos >= 0) {
        // include entry in commit

        DirCacheIterator dcTree = treeWalk.getTree(dcIdx,
            DirCacheIterator.class);
        FileTreeIterator fTree = treeWalk.getTree(fIdx,
            FileTreeIterator.class);

        // check if entry refers to a tracked file
        boolean tracked = dcTree != null || hTree != null;
        if (!tracked)
          break;

        if (fTree != null) {
          // create a new DirCacheEntry with data retrieved from disk
          final DirCacheEntry dcEntry = new DirCacheEntry(path);
          long entryLength = fTree.getEntryLength();
          dcEntry.setLength(entryLength);
          dcEntry.setLastModified(fTree.getEntryLastModified());
          dcEntry.setFileMode(fTree.getIndexFileMode(dcTree));

          boolean objectExists = (dcTree != null && fTree
              .idEqual(dcTree))
              || (hTree != null && fTree.idEqual(hTree));
          if (objectExists) {
            dcEntry.setObjectId(fTree.getEntryObjectId());
          } else {
            if (FileMode.GITLINK.equals(dcEntry.getFileMode()))
              dcEntry.setObjectId(fTree.getEntryObjectId());
            else {
              // insert object
              if (inserter == null)
                inserter = repo.newObjectInserter();
              long contentLength = fTree.getEntryContentLength();
              InputStream inputStream = fTree.openEntryStream();
              try {
                dcEntry.setObjectId(inserter.insert(
                    Constants.OBJ_BLOB, contentLength,
                    inputStream));
              } finally {
                inputStream.close();
              }
            }
          }

          // update index
          dcEditor.add(new PathEdit(path) {
            @Override
            public void apply(DirCacheEntry ent) {
              ent.copyMetaData(dcEntry);
            }
          });
          // add to temporary in-core index
          dcBuilder.add(dcEntry);

          if (emptyCommit
              && (hTree == null || !hTree.idEqual(fTree) || hTree
                  .getEntryRawMode() != fTree
                  .getEntryRawMode()))
            // this is a change
            emptyCommit = false;
        } else {
          // if no file exists on disk, remove entry from index and
          // don't add it to temporary in-core index
          dcEditor.add(new DeletePath(path));

          if (emptyCommit && hTree != null)
            // this is a change
            emptyCommit = false;
        }

        // keep track of processed path
        onlyProcessed[pos] = true;
      } else {
        // add entries from HEAD for all other paths
        if (hTree != null) {
          // create a new DirCacheEntry with data retrieved from HEAD
          final DirCacheEntry dcEntry = new DirCacheEntry(path);
          dcEntry.setObjectId(hTree.getEntryObjectId());
          dcEntry.setFileMode(hTree.getEntryFileMode());

          // add to temporary in-core index
          dcBuilder.add(dcEntry);
        }
      }
    }

    // there must be no unprocessed paths left at this point; otherwise an
    // untracked or unknown path has been specified
    for (int i = 0; i < onlyProcessed.length; i++)
      if (!onlyProcessed[i])
        throw new JGitInternalException(MessageFormat.format(
            JGitText.get().entryNotFoundByPath, only.get(i)));

    // there must be at least one change
    if (emptyCommit)
      throw new JGitInternalException(JGitText.get().emptyCommit);

    // update index
    dcEditor.commit();
    // finish temporary in-core index used for this commit
    dcBuilder.finish();
    return inCoreIndex;
  }
View Full Code Here

TOP

Related Classes of org.eclipse.jgit.dircache.DirCacheBuilder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.