libgit2 / libgit2/libgit2sharp
Please consider adding AOT support for .Diff.Compare<T>()
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C#
- Sterne
- 3.5k
- Forks
- 925
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
When utilizing libgit2sharp in combination with the .NET 8 PublishAot feature, all repository creation, file staging and committing operations are successful, however, the git diff function throws a NullReferenceException.
Is there a way to get this working under AOT?
Steps To Reproduce:
- Create a .NET 8 console project
dotnet new console -o aot-test cd aot-test - Adjust aot-test.csproj to include libgit2sharp reference and activate PublishAot feature
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework> <RootNamespace>aot_test</RootNamespace> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <PublishAot>true</PublishAot> </PropertyGroup> <ItemGroup> <PackageReference Include="libgit2sharp" Version="0.29.0" /> </ItemGroup> </Project> - Insert the following code into Progmram.cs:
using LibGit2Sharp;
var path = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(path);
Repository.Init(path, false);
var userName = "Tester";
var email = "tester@mail.net";
Func<Signature> getSignature = () => new Signature(userName, email, DateTimeOffset.Now);
using (var repo = new Repository(path))
{
var fileName = "test.txt";
var filePath = Path.Combine(path, fileName);
File.WriteAllText(filePath, "Hello, World!");
Commands.Stage(repo, fileName);
var commit1 = repo.Commit("Initial commit", getSignature(), getSignature());
File.AppendAllText(filePath, "\nAppended Line");
Commands.Stage(repo, fileName);
var commit2 = repo.Commit("Second commit", getSignature(), getSignature());
Console.WriteLine($"Commits Count {repo.Commits.Count()}");
var changes = repo.Diff.Compare<Patch>(commit1.Tree, commit2.Tree);
Console.WriteLine($"Diff Changes Count = {changes.Count()}");
}
- Use
dotnet runfor testing, it will display:
Commits Count 2
Diff Changes Count = 1
- Use
dotnet publish,.\bin\Release\net8.0\win-x64\publish\aot-test.exeto test the native AOT version, it throws an exception onrepo.Diff.Compare<Patch>():
Commits Count 2
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at aot-test!<BaseAddress>+0x19af4c
at aot-test!<BaseAddress>+0x199437
Current Behavior:
The native AOT functions for repository creation, file staging, and committing operations are functional, but the git diff function is not.
Anticipated Behavior:
Please consider adding AOT support for the git diff API.
Version of LibGit2Sharp (release number or SHA1)
0.29.0
Operating system(s) tested; .NET runtime tested
- OS: Windows 11
- .NET: 8.0.100
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit dem .NET 8-Konsolenprojekt und seinem Setup aus aot-test.csproj/Program.cs und reproduziere dann den Fehler mit dotnet publish und repo.Diff.Compare(commit1.Tree, commit2.Tree). Fertig ist die Aufgabe, wenn die native AOT-Executable den Diff-Aufruf abschließt und eine Diff-Änderung meldet, anstatt NullReferenceException auszulösen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- csharp
- Bereich
- api
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100