Статус JGit не отображает какие-либо файлы, когда должен

Я написал тест Спока, чтобы узнать, как использовать JGit. Общая идея теста состоит из следующих шагов:

  1. Создайте каталог «TestRepo».
  2. Инициализируйте там новый репозиторий Git ("TestRepo/.git")
  3. Создайте новый файл в родительском каталоге (TestRepo) и установите его текст на что-нибудь, чтобы занимать место.
  4. Вызовите "git статус"
  5. (отладка) Groovy дамп возвращенного объекта Status
  6. Утверждают, что возвращенный объект Status имеет файл, указанный как untracked.

Когда я запускаю приведенный ниже тест, он терпит неудачу. Почему?

state.dump() отпечатков

Status@38989dff 
    diff=org.eclipse.jgit.lib.IndexDiff@72def3cd 
    clean=true 
    hasUncommittedChanges=false

Код ниже:

class GitActionsSpec extends Specification {
    public static final ROOT_DIR_PATH = Paths.get(System.getProperty("user.home"), "TestRepo")
    public static final ROOT_DIR_STRING = ROOT_DIR_PATH.toString()
    public static final GIT_DIR_PATH = ROOT_DIR_PATH.resolve(".git")

    @Shared
    Git git

    /**
     * Creates a repository in rootDirPath
     */
    def setupSpec() {
        if (Files.exists(ROOT_DIR_PATH)) {
            deleteDirectory(ROOT_DIR_PATH)
        }
        Files.createDirectory(ROOT_DIR_PATH)

        /*
        GitActions.createRepoIn(File parentDirectory) {
            return Git.init().setDirectory(f).call()
        }
        */
        git = GitActions.createRepoIn(ROOT_DIR_PATH.toFile())
        assert git.repository.getDirectory().exists()
    }

    // The actual test
    def "A newly-created file should be listed as 'untracked'"() {
        given: "A new file"
        Path file = ROOT_DIR_PATH.relativize(ROOT_DIR_PATH.resolve("file.txt"))
        file.text = "filler text"
        assert Files.exists(file)

        when: "user requests the status"
        Status state = git.status().addPath(file.toString()).call()

        then: "Git lists that file as untracked"
        println state.dump()
        !state.getUntracked().isEmpty()
    }

    def cleanupSpec() {
        git.close()
        deleteDirectory(ROOT_DIR_PATH)
    }

    def deleteDirectory(Path directory) {
        Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
            @Override
            FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                Files.delete(dir)
                return FileVisitResult.CONTINUE
            }

            @Override
            FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                Files.delete(file)
                return FileVisitResult.CONTINUE
            }
        })
    }
}

person kadblas    schedule 22.02.2016    source источник


Ответы (1)


Оказывается, проблема заключалась в коде, устанавливающем file.

Файл toString() возвращает A, а не B:

О: /home/user/Project/Module/file.txt

B: /home/user/TestRepo/file.txt

person kadblas    schedule 22.02.2016