Skip to content

Commit 83bc4c7

Browse files
committed
fixed error where data dir was being duplicated when writing it out to a new place
1 parent 49f6c27 commit 83bc4c7

2 files changed

Lines changed: 25 additions & 9 deletions

File tree

src/main/java/gov/loc/repository/bagit/writer/BagWriter.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,13 @@
2222
import gov.loc.repository.bagit.domain.Manifest;
2323
import gov.loc.repository.bagit.domain.Version;
2424
import gov.loc.repository.bagit.hash.Hasher;
25-
import gov.loc.repository.bagit.verify.BagVerifier;
2625
import javafx.util.Pair;
2726

2827
/**
2928
* responsible for writing out a bag.
3029
*/
3130
public class BagWriter {
32-
private static final Logger logger = LoggerFactory.getLogger(BagVerifier.class);
31+
private static final Logger logger = LoggerFactory.getLogger(BagWriter.class);
3332

3433
private BagWriter(){}
3534

@@ -71,7 +70,7 @@ protected static Path writeVersionDependentPayloadFiles(Bag bag, Path outputDir)
7170
else{
7271
Path dataDir = outputDir.resolve("data");
7372
Files.createDirectories(dataDir);
74-
writePayloadFiles(bag.getPayLoadManifests(), dataDir, bag.getRootDir());
73+
writePayloadFiles(bag.getPayLoadManifests(), dataDir, bag.getRootDir().resolve("data"));
7574
}
7675

7776
return bagitDir;
@@ -102,14 +101,14 @@ public static void writeBagitFile(Version version, String encoding, Path outputD
102101
* Write the payload <b>file(s)</b> to the output directory
103102
* @param payloadManifests the set of objects representing the payload manifests
104103
* @param outputDir the data directory of the bag
105-
* @param bagRootDir the root directory of the bag
104+
* @param bagDataDir the data directory of the bag
106105
* @throws IOException if there was a problem writing a file
107106
*/
108-
public static void writePayloadFiles(Set<Manifest> payloadManifests, Path outputDir, Path bagRootDir) throws IOException{
107+
public static void writePayloadFiles(Set<Manifest> payloadManifests, Path outputDir, Path bagDataDir) throws IOException{
109108
logger.info("Writing payload files");
110109
for(Manifest payloadManifest : payloadManifests){
111110
for(Path payloadFile : payloadManifest.getFileToChecksumMap().keySet()){
112-
Path relativePayloadPath = bagRootDir.relativize(payloadFile);
111+
Path relativePayloadPath = bagDataDir.relativize(payloadFile);
113112

114113
Path writeToPath = outputDir.resolve(relativePayloadPath);
115114
logger.debug("Writing payload file [{}] to [{}]", payloadFile, writeToPath);

src/test/java/gov/loc/repository/bagit/writer/BagWriterTest.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.junit.Test;
2020
import org.junit.rules.TemporaryFolder;
2121

22+
import gov.loc.repository.bagit.creator.BagCreator;
2223
import gov.loc.repository.bagit.domain.Bag;
2324
import gov.loc.repository.bagit.domain.FetchItem;
2425
import gov.loc.repository.bagit.domain.Manifest;
@@ -33,6 +34,22 @@ public class BagWriterTest extends Assert {
3334

3435
private BagReader reader = new BagReader();
3536

37+
@Test
38+
public void testGetCorrectRelativeOuputPath() throws Exception{
39+
Path root = Paths.get(folder.newFolder().toURI());
40+
Bag bag = BagCreator.bagInPlace(root, StandardSupportedAlgorithms.MD5, false);
41+
42+
Path testFile = root.resolve("data").resolve("fooFile.txt");
43+
Files.createFile(testFile);
44+
Manifest manifest = (Manifest) bag.getPayLoadManifests().toArray()[0];
45+
manifest.getFileToChecksumMap().put(testFile, "CHECKSUM");
46+
bag.getPayLoadManifests().add(manifest);
47+
48+
Path newRoot = Paths.get(folder.newFolder().toURI());
49+
BagWriter.write(bag, newRoot);
50+
assertTrue(Files.exists(newRoot.resolve("data").resolve("fooFile.txt")));
51+
}
52+
3653
@Test
3754
public void testWriteVersion97() throws Exception{
3855
Path rootDir = Paths.get(getClass().getClassLoader().getResource("bags/v0_97/bag").toURI());
@@ -153,10 +170,10 @@ public void testWritePayloadFiles() throws IOException, URISyntaxException{
153170
@Test
154171
public void testWriteEmptyBagStillCreatesDataDir() throws Exception{
155172
Bag bag = new Bag();
156-
Path output = Paths.get(folder.newFolder().toURI());
157-
Path dataDir = output.resolve("data");
173+
bag.setRootDir(Paths.get(folder.newFolder().toURI()));
174+
Path dataDir = bag.getRootDir().resolve("data");
158175

159-
BagWriter.write(bag, output);
176+
BagWriter.write(bag, bag.getRootDir());
160177
assertTrue(Files.exists(dataDir));
161178
}
162179
}

0 commit comments

Comments
 (0)