Потенциальный недостаток метода SBT IO.zip? - PullRequest
0 голосов
/ 25 января 2012

Я работаю над плагином SBT, где я хотел бы заархивировать каталог. Это возможно из-за следующего метода в IO :

def zip(sources: Traversable[(File,String)], outputZip: File): Unit

После работы с этим методом кажется, что просто передать ему каталог и ожидать, что результирующий файл zip будет иметь ту же структуру файлов и папок, будет неправильным. Передача каталога (пустого или иного) приводит к следующему:

[error]...:zipper: java.util.zip.ZipException: ZIP file must have at least one entry

Следовательно, похоже, что способ получить использование метода zip состоит в том, чтобы пройти по каталогу и добавить каждый файл отдельно к объекту Traversable.

Предполагая, что мое понимание правильное, это кажется мне очень странным - очень редко пользователи должны выбирать, что следует добавить в архив.

Есть мысли по этому поводу?

Ответы [ 2 ]

1 голос
/ 25 января 2012

Кажется, что вы можете использовать это, чтобы составить почтовый индекс с файлами из нескольких мест.Я вижу использование этого в системе сборки.

0 голосов
/ 02 сентября 2013

Вот некоторый код для архивации каталогов с использованием класса ввода-вывода sbt:

 IO.withTemporaryDirectory(base => {
    val dirToZip = new File(base, "lib")
    IO.createDirectory(dirToZip)
    IO.write(dirToZip / "test1", "test")
    IO.write(dirToZip / "test2", "test")

    val zip: File = base / ("test.zip")
    IO.zip(allSubpaths(dirToZip), zip)

    val out: File = base / "out"
    IO.createDirectory(out)
    IO.unzip(zip,out) mustEqual(Set(out /"test1", out  / "test2"))
    IO.delete((out **  "*").get)
    //Create  a  zip containing this  lib  directory but  under  a  different directory in the zip
    val finder: PathFinder = dirToZip ** "*" --- dirToZip //Remove dirToZip as you  can't  rebase a directory  to  itself
    IO.zip(finder x rebase(dirToZip, "newlib"), base / "rebased.zip")

    IO.createDirectory(out)
    IO.unzip(base  /  "rebased.zip",out) mustEqual(Set(out /"newlib"/"test1", out  / "newlib"/ "test2"))
  })

См. Документы

http://www.scala -sbt.org / 0.12.2 / docs /Подробные темы / Mapping-Files.html

http://www.scala -sbt.org / 0.12.3 / docs / подробные темы / Paths.html

советы по созданию объекта Traversable для передачи в IO.zip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...