@ -19,8 +19,8 @@ import java.io.File;
import java.io.FileInputStream ;
import java.io.FileNotFoundException ;
import java.io.IOException ;
import java.nio.file.AtomicMoveNotSupportedException ;
import java.nio.file.Files ;
import java.nio.file.NoSuchFileException ;
import java.nio.file.StandardCopyOption ;
import java.text.MessageFormat ;
import java.util.ArrayList ;
@ -685,48 +685,47 @@ public class ObjectDirectory extends FileObjectDatabase {
FileUtils . delete ( tmp , FileUtils . RETRY ) ;
return InsertLooseObjectResult . EXISTS_LOOSE ;
}
try {
Files . move ( FileUtils . toPath ( tmp ) , FileUtils . toPath ( dst ) ,
StandardCopyOption . ATOMIC_MOVE ) ;
dst . setReadOnly ( ) ;
unpackedObjectCache . add ( id ) ;
return InsertLooseObjectResult . INSERTED ;
} catch ( AtomicMoveNotSupportedException e ) {
LOG . error ( e . getMessage ( ) , e ) ;
} catch ( IOException e ) {
// ignore
}
// Maybe the directory doesn't exist yet as the object
// directories are always lazily created. Note that we
// try the rename first as the directory likely does exist.
try {
return tryMove ( tmp , dst , id ) ;
} catch ( NoSuchFileException e ) {
// It's possible the directory doesn't exist yet as the object
// directories are always lazily created. Note that we try the
// rename/move first as the directory likely does exist.
//
// Create the directory.
//
FileUtils . mkdir ( dst . getParentFile ( ) , true ) ;
try {
Files . move ( FileUtils . toPath ( tmp ) , FileUtils . toPath ( dst ) ,
StandardCopyOption . ATOMIC_MOVE ) ;
dst . setReadOnly ( ) ;
unpackedObjectCache . add ( id ) ;
return InsertLooseObjectResult . INSERTED ;
} catch ( AtomicMoveNotSupportedException e ) {
LOG . error ( e . getMessage ( ) , e ) ;
} catch ( IOException e ) {
LOG . debug ( e . getMessage ( ) , e ) ;
}
if ( ! createDuplicate & & has ( id ) ) {
// Any other IO error is considered a failure.
//
LOG . error ( e . getMessage ( ) , e ) ;
FileUtils . delete ( tmp , FileUtils . RETRY ) ;
return InsertLooseObjectResult . EXISTS_PACKED ;
return InsertLooseObjectResult . FAILURE ;
}
// The object failed to be renamed into its proper
// location and it doesn't exist in the repository
// either. We really don't know what went wrong, so
// fail.
try {
return tryMove ( tmp , dst , id ) ;
} catch ( IOException e ) {
// The object failed to be renamed into its proper location and
// it doesn't exist in the repository either. We really don't
// know what went wrong, so fail.
//
LOG . error ( e . getMessage ( ) , e ) ;
FileUtils . delete ( tmp , FileUtils . RETRY ) ;
return InsertLooseObjectResult . FAILURE ;
}
}
private InsertLooseObjectResult tryMove ( File tmp , File dst ,
ObjectId id )
throws IOException {
Files . move ( FileUtils . toPath ( tmp ) , FileUtils . toPath ( dst ) ,
StandardCopyOption . ATOMIC_MOVE ) ;
dst . setReadOnly ( ) ;
unpackedObjectCache . add ( id ) ;
return InsertLooseObjectResult . INSERTED ;
}
boolean searchPacksAgain ( PackList old ) {
// Whether to trust the pack folder's modification time. If set