From 01e65ad60c6d7f2e4b8de732bde7049f6c17ee42 Mon Sep 17 00:00:00 2001 From: Alexandre Porcelli Date: Thu, 27 Feb 2014 17:52:03 -0300 Subject: [PATCH] BZ-1045537: this looks like a JGit issue, this fix is a woraround that forces clean internal cache. as this issues is windows only, the code just forces the clean if OS is windows. --- .../java/nio/fs/jgit/JGitFileSystemProvider.java | 10 +++++++--- .../org/uberfire/java/nio/fs/jgit/util/JGitUtil.java | 8 ++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/uberfire-nio2-backport/uberfire-nio2-impls/uberfire-nio2-jgit/src/main/java/org/uberfire/java/nio/fs/jgit/JGitFileSystemProvider.java b/uberfire-nio2-backport/uberfire-nio2-impls/uberfire-nio2-jgit/src/main/java/org/uberfire/java/nio/fs/jgit/JGitFileSystemProvider.java index 301565e8f9..94e0be2069 100644 --- a/uberfire-nio2-backport/uberfire-nio2-impls/uberfire-nio2-jgit/src/main/java/org/uberfire/java/nio/fs/jgit/JGitFileSystemProvider.java +++ b/uberfire-nio2-backport/uberfire-nio2-impls/uberfire-nio2-jgit/src/main/java/org/uberfire/java/nio/fs/jgit/JGitFileSystemProvider.java @@ -53,6 +53,8 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.storage.file.WindowCache; +import org.eclipse.jgit.storage.file.WindowCacheConfig; import org.eclipse.jgit.transport.CredentialsProvider; import org.eclipse.jgit.transport.PostReceiveHook; import org.eclipse.jgit.transport.PreReceiveHook; @@ -984,12 +986,14 @@ public void delete( final Path path, private boolean deleteRepo( final FileSystem fileSystem ) { final File gitDir = ( (JGitFileSystem) fileSystem ).gitRepo().getRepository().getDirectory(); fileSystem.close(); + fileSystem.dispose(); try { + if ( System.getProperty( "os.name" ).toLowerCase().contains( "windows" ) ) { + //this operation forces a cache clean freeing any lock -> windows only issue! + WindowCache.reconfigure( new WindowCacheConfig() ); + } FileUtils.delete( gitDir, FileUtils.RECURSIVE | FileUtils.RETRY ); - closedFileSystems.remove( fileSystem ); - fileSystems.remove( ( (JGitFileSystem) fileSystem ).id() ); - repoIndex.remove( ( (JGitFileSystem) fileSystem ).gitRepo().getRepository() ); return true; } catch ( java.io.IOException e ) { throw new IOException( e ); diff --git a/uberfire-nio2-backport/uberfire-nio2-impls/uberfire-nio2-jgit/src/main/java/org/uberfire/java/nio/fs/jgit/util/JGitUtil.java b/uberfire-nio2-backport/uberfire-nio2-impls/uberfire-nio2-jgit/src/main/java/org/uberfire/java/nio/fs/jgit/util/JGitUtil.java index 1a0716ed42..92db1ed17f 100644 --- a/uberfire-nio2-backport/uberfire-nio2-impls/uberfire-nio2-jgit/src/main/java/org/uberfire/java/nio/fs/jgit/util/JGitUtil.java +++ b/uberfire-nio2-backport/uberfire-nio2-impls/uberfire-nio2-jgit/src/main/java/org/uberfire/java/nio/fs/jgit/util/JGitUtil.java @@ -16,6 +16,7 @@ package org.uberfire.java.nio.fs.jgit.util; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; @@ -142,12 +143,7 @@ public static InputStream resolveInputStream( final Git git, tw.enterSubtree(); continue; } - final ObjectId entid = tw.getObjectId( 0 ); - final FileMode entmode = tw.getFileMode( 0 ); - final RevObject ro = rw.lookupAny( entid, entmode.getObjectType() ); - rw.parseBody( ro ); - final ObjectLoader ldr = git.getRepository().open( ro.getId(), Constants.OBJ_BLOB ); - return ldr.openStream(); + return new ByteArrayInputStream( git.getRepository().open( tw.getObjectId( 0 ), Constants.OBJ_BLOB ).getBytes() ); } } catch ( final Throwable t ) { throw new NoSuchFileException( "Can't find '" + gitPath + "' in tree '" + treeRef + "'" );