From da86750c3a32fa8351bdee5a93045af93b909771 Mon Sep 17 00:00:00 2001 From: "Joseph K. Strauss" Date: Thu, 2 Mar 2017 23:24:48 -0500 Subject: [PATCH] Introduce tests for --chmod option --- .../com/madgag/git/bfg/test/unpackedRepo.scala | 5 ++++- .../resources/sample-repos/chmodExample.git.zip | Bin 0 -> 12226 bytes .../scala/com/madgag/git/bfg/cli/MainSpec.scala | 11 +++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 bfg/src/test/resources/sample-repos/chmodExample.git.zip diff --git a/bfg-test/src/main/scala/com/madgag/git/bfg/test/unpackedRepo.scala b/bfg-test/src/main/scala/com/madgag/git/bfg/test/unpackedRepo.scala index 673b1f8b..c86a675f 100644 --- a/bfg-test/src/main/scala/com/madgag/git/bfg/test/unpackedRepo.scala +++ b/bfg-test/src/main/scala/com/madgag/git/bfg/test/unpackedRepo.scala @@ -4,7 +4,7 @@ import com.madgag.git._ import com.madgag.git.test._ import org.eclipse.jgit.internal.storage.file.{GC, ObjectDirectory} import org.eclipse.jgit.lib.Constants.OBJ_BLOB -import org.eclipse.jgit.lib.{ObjectId, ObjectReader, Repository} +import org.eclipse.jgit.lib.{ObjectId, ObjectReader, Repository, FileMode} import org.eclipse.jgit.revwalk.{RevCommit, RevTree} import org.eclipse.jgit.treewalk.TreeWalk import org.scalatest.matchers.{MatchResult, Matcher} @@ -58,6 +58,9 @@ class unpackedRepo(filePath: String) extends FlatSpec with Matchers { } } + def haveFileMode(name: String, fm: FileMode): Matcher[ObjectId] = + haveTreeEntry(name, (file : TreeWalk) => file.getFileMode == fm && file.getNameString == name) + def treeEntryNames(t: RevTree, p: TreeWalk => Boolean): Seq[String] = t.walk(postOrderTraversal = true).withFilter(p).map(_.getNameString).toList diff --git a/bfg/src/test/resources/sample-repos/chmodExample.git.zip b/bfg/src/test/resources/sample-repos/chmodExample.git.zip new file mode 100644 index 0000000000000000000000000000000000000000..36ff8d6a12797e83379eee54582357360b33a867 GIT binary patch literal 12226 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 aE?8L(4ibTZV>%LmA-GmS9{g_r;C}%N$>4qf literal 0 HcmV?d00001 diff --git a/bfg/src/test/scala/com/madgag/git/bfg/cli/MainSpec.scala b/bfg/src/test/scala/com/madgag/git/bfg/cli/MainSpec.scala index 1a7f684e..e579fb51 100644 --- a/bfg/src/test/scala/com/madgag/git/bfg/cli/MainSpec.scala +++ b/bfg/src/test/scala/com/madgag/git/bfg/cli/MainSpec.scala @@ -25,6 +25,7 @@ import com.madgag.git.bfg.cli.test.unpackedRepo import org.eclipse.jgit.lib.ObjectId import org.eclipse.jgit.revwalk.RevCommit import org.scalatest.{FlatSpec, Inspectors, Matchers, OptionValues} +import org.eclipse.jgit.lib.FileMode import scalax.file.ImplicitConversions._ import scalax.file.Path @@ -124,5 +125,15 @@ class MainSpec extends FlatSpec with Matchers with OptionValues with Inspectors run("--fix-filename-duplicates-preferring tree") } } + + "Corrupt trees containing bad file modes" should "make .pl and .sh files executable and all other files non-executable" in new unpackedRepo("/sample-repos/chmodExample.git.zip") { + ensureRemovalFrom(commitHist()).ofCommitsThat(haveFileMode("test.pl", FileMode.REGULAR_FILE)) { + ensureRemovalFrom(commitHist()).ofCommitsThat(haveFileMode("test.sh", FileMode.REGULAR_FILE)) { + ensureRemovalFrom(commitHist()).ofCommitsThat(haveFileMode("test.txt", FileMode.EXECUTABLE_FILE)) { + run("--no-blob-protection --chmod:-x=*.* --chmod:+x=*.{sh,pl}") + } + } + } + } }