Skip to content

Commit

Permalink
Give load command the ability to overwrite an existing database
Browse files Browse the repository at this point in the history
  • Loading branch information
benbc committed Sep 7, 2016
1 parent 5d68c17 commit 9d54125
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 1 deletion.
Expand Up @@ -22,6 +22,7 @@
import java.io.IOException;
import java.nio.file.AccessDeniedException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.nio.file.Paths;
Expand Down Expand Up @@ -91,7 +92,11 @@ public void execute( String[] args ) throws IncorrectUsage, CommandFailed
{
Path archive = parse( args, "from", Paths::get );
String database = parse( args, "database", identity() );
load( archive, database, toDatabaseDirectory( database ) );
boolean force = Args.parse( args ).getBoolean( "force" );

Path databaseDirectory = toDatabaseDirectory( database );
deleteIfNecessary( databaseDirectory, force );
load( archive, database, databaseDirectory );
}

private <T> T parse( String[] args, String argument, Function<String, T> converter ) throws IncorrectUsage
Expand All @@ -117,6 +122,21 @@ private Path toDatabaseDirectory( String databaseName )
.get( database_path ).toPath();
}

private void deleteIfNecessary( Path databaseDirectory, boolean force ) throws CommandFailed
{
try
{
if ( force )
{
Files.deleteIfExists( databaseDirectory );
}
}
catch ( IOException e )
{
wrapIOException( e );
}
}

private void load( Path archive, String database, Path databaseDirectory ) throws CommandFailed
{
try
Expand Down
Expand Up @@ -46,6 +46,7 @@
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
Expand Down Expand Up @@ -86,6 +87,42 @@ public void shouldCalculateTheDatabaseDirectoryFromConfig()
verify( loader ).load( any(), eq( Paths.get( "/some/data/dir/databases/foo.db" ) ) );
}

@Test
public void shouldDeleteTheOldDatabaseIfForceArgumentIsProvided()
throws CommandFailed, IncorrectUsage, IOException, IncorrectFormat
{
Path databaseDirectory = homeDir.resolve( "data/databases/foo.db" );
Files.createDirectories( databaseDirectory.getParent() );
Files.createFile( databaseDirectory );

doAnswer( ignored ->
{
assertThat( Files.exists( databaseDirectory ), equalTo( false ));
return null;
} ).when( loader ).load( any(), any() );

new LoadCommand( homeDir, configDir, loader )
.execute( new String[]{"--database=foo.db", "--from=" + archive, "--force"} );
}

@Test
public void shouldNotDeleteTheOldDatabaseIfForceArgumentIsNotProvided()
throws CommandFailed, IncorrectUsage, IOException, IncorrectFormat
{
Path databaseDirectory = homeDir.resolve( "data/databases/foo.db" );
Files.createDirectories( databaseDirectory.getParent() );
Files.createFile( databaseDirectory );

doAnswer( ignored ->
{
assertThat( Files.exists( databaseDirectory ), equalTo( true ));
return null;
} ).when( loader ).load( any(), any() );

new LoadCommand( homeDir, configDir, loader )
.execute( new String[]{"--database=foo.db", "--from=" + archive} );
}

@Test
public void shouldObjectIfTheDatabaseArgumentIsMissing() throws CommandFailed
{
Expand Down

0 comments on commit 9d54125

Please sign in to comment.