refactor: rewrite submodule to support IsDirty state (#339)

This commit is contained in:
leo 2024-08-08 21:11:10 +08:00
parent eb441852b0
commit 1fe2be11a7
No known key found for this signature in database
10 changed files with 110 additions and 19 deletions

View file

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
@ -70,6 +71,16 @@ namespace SourceGit.Models
}
}
public void UpdateSubmodules(List<Submodule> submodules)
{
lock (_lockSubmodule)
{
_submodules.Clear();
foreach (var submodule in submodules)
_submodules.Add(submodule.Path);
}
}
public void MarkBranchDirtyManually()
{
_updateBranch = DateTime.Now.ToFileTime() - 1;
@ -168,7 +179,7 @@ namespace SourceGit.Models
return;
var name = e.Name.Replace("\\", "/");
if (name.StartsWith("modules", StringComparison.Ordinal))
if (name.StartsWith("modules", StringComparison.Ordinal) && name.EndsWith("HEAD", StringComparison.Ordinal))
{
_updateSubmodules = DateTime.Now.AddSeconds(1).ToFileTime();
}
@ -201,6 +212,19 @@ namespace SourceGit.Models
var name = e.Name.Replace("\\", "/");
if (name == ".git" || name.StartsWith(".git/", StringComparison.Ordinal))
return;
lock (_submodules)
{
foreach (var submodule in _submodules)
{
if (name.StartsWith(submodule, StringComparison.Ordinal))
{
_updateSubmodules = DateTime.Now.AddSeconds(1).ToFileTime();
return;
}
}
}
_updateWC = DateTime.Now.AddSeconds(1).ToFileTime();
}
@ -214,5 +238,8 @@ namespace SourceGit.Models
private long _updateSubmodules = 0;
private long _updateStashes = 0;
private long _updateTags = 0;
private object _lockSubmodule = new object();
private List<string> _submodules = new List<string>();
}
}