diff --git a/src/Models/AvatarManager.cs b/src/Models/AvatarManager.cs
index e9811846a..f51d74181 100644
--- a/src/Models/AvatarManager.cs
+++ b/src/Models/AvatarManager.cs
@@ -44,7 +44,7 @@ public static AvatarManager Instance
public void Start()
{
- _storePath = Path.Combine(Native.OS.DataDir, "avatars");
+ _storePath = Path.Combine(Native.OS.CacheDir, "avatars");
if (!Directory.Exists(_storePath))
Directory.CreateDirectory(_storePath);
diff --git a/src/Models/IpcChannel.cs b/src/Models/IpcChannel.cs
index 702f0630b..75c4c7418 100644
--- a/src/Models/IpcChannel.cs
+++ b/src/Models/IpcChannel.cs
@@ -16,7 +16,7 @@ public IpcChannel()
{
try
{
- _singletonLock = File.Open(Path.Combine(Native.OS.DataDir, "process.lock"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
+ _singletonLock = File.Open(Path.Combine(Native.OS.RuntimeDir, "process.lock"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
IsFirstInstance = true;
_server = new NamedPipeServerStream(
"SourceGitIPCChannel" + Environment.UserName,
diff --git a/src/Native/OS.cs b/src/Native/OS.cs
index 1fd4b34d9..96103bc51 100644
--- a/src/Native/OS.cs
+++ b/src/Native/OS.cs
@@ -33,6 +33,18 @@ public static string DataDir
private set;
} = string.Empty;
+ public static string CacheDir
+ {
+ get;
+ private set;
+ } = string.Empty;
+
+ public static string RuntimeDir
+ {
+ get;
+ private set;
+ } = string.Empty;
+
public static string GitExecutable
{
get => _gitExecutable;
@@ -150,14 +162,41 @@ public static void SetupDataDir()
}
}
- var osAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
- if (string.IsNullOrEmpty(osAppDataDir))
- DataDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".sourcegit");
- else
- DataDir = Path.Combine(osAppDataDir, "SourceGit");
+ DataDir = Path.Combine(Xdg.Directories.BaseDirectory.ConfigHome, "SourceGit");
+ CacheDir = Path.Combine(Xdg.Directories.BaseDirectory.CacheHome, "SourceGit");
+ RuntimeDir = Path.Combine(Xdg.Directories.BaseDirectory.RuntimeDir, "SourceGit");
if (!Directory.Exists(DataDir))
+ {
Directory.CreateDirectory(DataDir);
+ }
+
+ if (!Directory.Exists(CacheDir))
+ {
+ Directory.CreateDirectory(CacheDir);
+ }
+
+ if (!Directory.Exists(RuntimeDir))
+ {
+ Directory.CreateDirectory(RuntimeDir);
+ }
+
+ var osAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
+ var oldDir = string.IsNullOrEmpty(osAppDataDir) ?
+ Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".sourcegit") :
+ Path.Combine(osAppDataDir, "SourceGit");
+
+
+ if (Directory.Exists(oldDir) && oldDir != DataDir)
+ {
+ foreach (var file in Directory.GetFiles(oldDir))
+ {
+ var fileName = Path.GetFileName(file);
+ File.Move(file, Path.Combine(DataDir, fileName));
+ }
+
+ Directory.Delete(oldDir, true);
+ }
}
public static void SetupExternalTools()
diff --git a/src/SourceGit.csproj b/src/SourceGit.csproj
index e62cdd204..b671e2abf 100644
--- a/src/SourceGit.csproj
+++ b/src/SourceGit.csproj
@@ -63,6 +63,7 @@
+