libgit2 / libgit2/libgit2sharp

TreeDefinition item recursive remove not working

未關閉
#2,057 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

主要語言
C#
星號
3.5k
分支
925
PR 合併指標
30 天內沒有已合併 PR

描述

Reproduction steps

Compile & run

using LibGit2Sharp;

Repository.Init(args[0]);
var repo = new Repository(args[0]);

TreeDefinition current = new();
current.Add("sample/stays/to/a/file", repo.ObjectDatabase.CreateBlob("stays".ToStream()), Mode.NonExecutableFile);
current.Add("sample/removed/to/a/file", repo.ObjectDatabase.CreateBlob("removed".ToStream()), Mode.NonExecutableFile);
current.Remove("sample/removed");

var tree = repo.ObjectDatabase.CreateTree(current);
var sig = new Signature("John Doe", "jd@example.com", DateTimeOffset.UtcNow);
var commit = repo.ObjectDatabase.CreateCommit(sig, sig, "Test", tree, new Commit[] { }, false);
var branch = repo.Branches.Add("main", commit, true);
repo.Refs.UpdateTarget(repo.Refs.Head, branch.Reference);
static class Ext
{
    public static Stream ToStream(this string data)
    {
        MemoryStream stream = new();
        StreamWriter writer = new(stream);
        writer.Write(data);
        writer.Flush();
        stream.Position = 0;
        return stream;
    }
}
Expected behavior

sample/removed path is not in repo

Actual behavior

sample/removed is there with the file

Version of LibGit2Sharp (release number or SHA1)

2.7.2

Operating system(s) tested; .NET runtime tested

linux (.net7) & windows (.net7)

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

從提供的重現中的 TreeDefinition.Remove("sample/removed") 呼叫開始,接著檢查 ObjectDatabase.CreateTree(current) 如何處理遞迴路徑。在 LibGit2Sharp 2.7.2 上執行重現,並確認產生的樹不包含 sample/removed 或其檔案。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
csharp
領域
tooling
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
45/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。