@ -56,6 +56,7 @@ import java.text.DateFormat;
import java.text.SimpleDateFormat ;
import java.text.SimpleDateFormat ;
import java.util.Locale ;
import java.util.Locale ;
import java.util.TimeZone ;
import java.util.TimeZone ;
import java.util.concurrent.atomic.AtomicReference ;
import org.eclipse.jgit.errors.ConfigInvalidException ;
import org.eclipse.jgit.errors.ConfigInvalidException ;
import org.eclipse.jgit.errors.CorruptObjectException ;
import org.eclipse.jgit.errors.CorruptObjectException ;
@ -97,9 +98,9 @@ public abstract class SystemReader {
private static class Default extends SystemReader {
private static class Default extends SystemReader {
private volatile String hostname ;
private volatile String hostname ;
private volatile FileBasedConfig systemConfig ;
private AtomicReference < FileBasedConfig > systemConfig = new AtomicReference < > ( ) ;
private volatile FileBasedConfig userConfig ;
private volatile AtomicReference < FileBasedConfig > userConfig = new AtomicReference < > ( ) ;
@Override
@Override
public String getenv ( String variable ) {
public String getenv ( String variable ) {
@ -113,10 +114,13 @@ public abstract class SystemReader {
@Override
@Override
public FileBasedConfig openSystemConfig ( Config parent , FS fs ) {
public FileBasedConfig openSystemConfig ( Config parent , FS fs ) {
if ( systemConfig = = null ) {
FileBasedConfig c = systemConfig . get ( ) ;
systemConfig = createSystemConfig ( parent , fs ) ;
if ( c = = null ) {
systemConfig . compareAndSet ( null ,
createSystemConfig ( parent , fs ) ) ;
c = systemConfig . get ( ) ;
}
}
return systemConfig ;
return c ;
}
}
protected FileBasedConfig createSystemConfig ( Config parent , FS fs ) {
protected FileBasedConfig createSystemConfig ( Config parent , FS fs ) {
@ -126,7 +130,7 @@ public abstract class SystemReader {
return new FileBasedConfig ( parent , configFile , fs ) ;
return new FileBasedConfig ( parent , configFile , fs ) ;
}
}
}
}
return new FileBasedConfig ( null , fs ) {
return new FileBasedConfig ( parent , null , fs ) {
@Override
@Override
public void load ( ) {
public void load ( ) {
// empty, do not load
// empty, do not load
@ -142,40 +146,35 @@ public abstract class SystemReader {
@Override
@Override
public FileBasedConfig openUserConfig ( Config parent , FS fs ) {
public FileBasedConfig openUserConfig ( Config parent , FS fs ) {
if ( userConfig = = null ) {
FileBasedConfig c = userConfig . get ( ) ;
File home = fs . userHome ( ) ;
if ( c = = null ) {
userConfig = new FileBasedConfig ( parent ,
userConfig . compareAndSet ( null , new FileBasedConfig ( parent ,
new File ( home , ".gitconfig" ) , fs ) ; //$NON-NLS-1$
new File ( fs . userHome ( ) , ".gitconfig" ) , fs ) ) ; //$NON-NLS-1$
c = userConfig . get ( ) ;
}
}
return userConfig ;
return c ;
}
}
@Override
@Override
public StoredConfig getSystemConfig ( )
public StoredConfig getSystemConfig ( )
throws IOException , ConfigInvalidException {
throws IOException , ConfigInvalidException {
if ( systemConfig = = null ) {
FileBasedConfig c = openSystemConfig ( null , FS . DETECTED ) ;
systemConfig = createSystemConfig ( null , FS . DETECTED ) ;
if ( c . isOutdated ( ) ) {
}
if ( systemConfig . isOutdated ( ) ) {
LOG . debug ( "loading system config {}" , systemConfig ) ; //$NON-NLS-1$
LOG . debug ( "loading system config {}" , systemConfig ) ; //$NON-NLS-1$
systemConfig . load ( ) ;
c . load ( ) ;
}
}
return systemConfig ;
return c ;
}
}
@Override
@Override
public StoredConfig getUserConfig ( )
public StoredConfig getUserConfig ( )
throws IOException , ConfigInvalidException {
throws IOException , ConfigInvalidException {
if ( userConfig = = null ) {
FileBasedConfig c = openUserConfig ( getSystemConfig ( ) , FS . DETECTED ) ;
userConfig = openUserConfig ( getSystemConfig ( ) , FS . DETECTED ) ;
if ( c . isOutdated ( ) ) {
} else {
getSystemConfig ( ) ;
}
if ( userConfig . isOutdated ( ) ) {
LOG . debug ( "loading user config {}" , userConfig ) ; //$NON-NLS-1$
LOG . debug ( "loading user config {}" , userConfig ) ; //$NON-NLS-1$
userConfig . load ( ) ;
c . load ( ) ;
}
}
return userConfig ;
return c ;
}
}
@Override
@Override