code: package com.beijunyi.parallelgit.utils;
  
  import java.io.IOException;
  
  import com.beijunyi.parallelgit.AbstractParallelGitTest;
  import org.eclipse.jgit.dircache.DirCache;
  import org.eclipse.jgit.lib.AnyObjectId;
  import org.eclipse.jgit.lib.Ref;
  import org.junit.Before;
  import org.junit.Test;
  
  import static org.junit.Assert.assertNotNull;
  
  public class CacheUtilsCreateTest extends AbstractParallelGitTest {
  
    @Before
    public void setUp() throws IOException {
      initRepository();
    }
  
    @Test
    public void createCacheFromCommit_theResultCacheShouldContainTheFilesInTheSpecifiedCommit() throws IOException {
      writeToCache("/file1.txt");
      writeToCache("/file2.txt");
      AnyObjectId commitId = commit(someCommitMessage(), null);
      DirCache cache = CacheUtils.forRevision(commitId, repo);
      assertNotNull(CacheUtils.getEntry("/file1.txt", cache));
      assertNotNull(CacheUtils.getEntry("/file2.txt", cache));
    }
  
    @Test
    public void createCacheFromTag_theResultCacheShouldContainTheFilesInTheTaggedCommit() throws IOException {
      writeToCache("/file1.txt");
      writeToCache("/file2.txt");
      AnyObjectId tagId = TagUtils.tagCommit("test_tag", commit(someCommitMessage(), null), repo).getObjectId();
      DirCache cache = CacheUtils.forRevision(tagId, repo);
      assertNotNull(CacheUtils.getEntry("/file1.txt", cache));
      assertNotNull(CacheUtils.getEntry("/file2.txt", cache));
    }
  
    @Test
    public void createCacheFromTagRef_theResultCacheShouldContainTheFilesInTheTaggedCommit() throws IOException {
      writeToCache("/file1.txt");
      writeToCache("/file2.txt");
      Ref tagRef = TagUtils.tagCommit("test_tag", commit(someCommitMessage(), null), repo);
      DirCache cache = CacheUtils.forRevision(tagRef, repo);
      assertNotNull(CacheUtils.getEntry("/file1.txt", cache));
      assertNotNull(CacheUtils.getEntry("/file2.txt", cache));
    }
  
    @Test
    public void createCacheFromBranch_theResultCacheShouldContainTheFilesInTheBranchHeadCommit() throws IOException {
      writeToCache("/file1.txt");
      writeToCache("/file2.txt");
      commitToBranch("test_branch", someCommitMessage(), null);
      DirCache cache = CacheUtils.forRevision("test_branch", repo);
      assertNotNull(CacheUtils.getEntry("/file1.txt", cache));
      assertNotNull(CacheUtils.getEntry("/file2.txt", cache));
    }
  
    @Test
    public void createCacheFromTree_theResultCacheShouldContainTheFilesInTheSpecifiedTree() throws IOException {
      writeToCache("/file1.txt");
      writeToCache("/file2.txt");
      AnyObjectId treeId = commit().getTree();
      DirCache cache = CacheUtils.forTree(treeId, repo);
      assertNotNull(CacheUtils.getEntry("/file1.txt", cache));
      assertNotNull(CacheUtils.getEntry("/file2.txt", cache));
    }
  
  }
  