- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有以下代码:
branch, err := gR.LookupBranch(branchName, git.BranchLocal)
if err != nil {
return err
}
defer branch.Free()
commit, err := gR.LookupCommit(branch.Target())
if err != nil {
return err
}
defer commit.Free()
tree, err := gR.LookupTree(commit.TreeId())
if err != nil {
return err
}
defer tree.Free()
err = tree.Walk(func(td string, te *git.TreeEntry) int {
if te.Type == git.ObjectBlob {
fmt.Println(te.Name)
}
return 0
})
这会递归地打印出存储库中的所有文件。例如,如果我们的存储库中有以下文件:
test_file.txt
test_file_2.txt
test_folder/test_subfile_1.txt
test_folder/test_subfolder/test_subfile_2.txt
然后它会打印:
test_file.txt
test_file2.txt
test_subfile_1.txt
test_subfile_2.txt
相反,我的目标是打印:
test_file.txt
test_file_2.txt
test_folder
然后也可以选择从文件夹里面开始走,所以可以打印:
test_subfile_1.txt
test_subfolder
我怎样才能做到这一点? (目的是将目录结构延迟加载到 Web 客户端中,即允许 Web 客户端在用户打开文件夹时加载文件夹的内容——另请注意,这是一个裸仓库)
最佳答案
为避免进入给定目录,从传递给 Walk
的函数返回 1
就足够了。
您可以将看到的目录保存在数组或 channel 中。
例子:
func echoFilesCollectDirs(repo *git.Repository, tree *git.Tree, ch chan *git.Tree) {
tree.Walk(func(td string, te *git.TreeEntry) int {
fmt.Println(te.Name)
if te.Type == git.ObjectTree {
t, _ := repo.LookupTree(te.Id)
go func() { ch <- t }() // send tree into channel to process it later
return 1
}
return 0
})
}
func main() {
gR, tree := getRepoAndTree() // returns (*git.Repository, *git.Tree)
ch := make(chan *git.Tree)
echoFilesCollectDirs(gR, tree, ch)
// process next directory in a channel
// t := <-ch
// echoFilesCollectDirs(gR, t, ch)
}
注意:为了使代码更短,我删除了错误处理和获取 *git.Repository
和根 *git.Tree 的样板部分
(函数 getRepoAndTree()
)。
关于git - 如何使 git2go tree.Walk() 非递归并显示文件夹并从目标文件夹开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53901670/
我创建了一个基于命令行可移植脚本的工业化不可知构建系统,可用于快速构建多个依赖项目,而不必依赖特定的 IDE 或构建工厂。它是不可知的,因为它不是基于单个构建引擎。我使用 cmake 创建了第一个版本
我最初使用 Java 目标开发了一个语法(用于 TestRig 支持),然后将其移植到 Python(从 git hub 语法存储库扩展了 Python3 语法,因此需要将操作移植到 Python
我有一个以 iPhone 和 watchOS 为目标的 Xcode 项目。 iPhone 目标使用加速度计,模拟器不支持。我可以只启动 iPhone 应用程序而不启动 watch 目标吗?我从: Ca
您好,我想创建一个批处理文件,用于在 .eml 文件(目标 A)中查找某些关键字,然后删除它们所在的行。之后,我需要批处理文件将"new"文件放入(目标 B)中的单独 .eml 文件中。文件也可以是
当尝试通过 IntelliJ 运行示例 CorDapp (GitHub CorDapp) 时,我收到以下错误: Cannot inline bytecode built with JVM target
我在尝试向我的 kotlin spring 项目添加一些依赖项时遇到问题。我使用 spring boot 初始化程序来运行一个基本项目。 我的问题:如果我取消对 jackson 或 Koin 依赖项的
这是有问题的网站: http://www.onepixelroom.com/londonrefurb 当我点击关于部分后面的多个圆圈时,我希望它更改上面文本中的引号。 到目前为止,我得到它来显示 文本
单击后,我将删除两个元素 $(this) 和 $("#foo")。 目前我的代码如下所示: $(this).remove(); $("#foo").remove(); 如何在不重复自己的情况下优化它?
我有一个小脚本,可将 Markdown 文件编译为 html,并将其与一些样式表和 javascript 一起插入到模板的主体中。我有一个 GNU makefile 来完成这个: output.htm
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
一些背景知识: 在android中我们开发了同样的应用,基本上我们先开发了Android应用,现在我们创建了它的IOS版本,所以这个应用有多个客户端。在 android 中,我们实际上是使用 Andr
我想知道是否可以使用 knockout 来更改html中的目标() 我的所有其他信息都在 JavaScript 中,所以这对我来说是一个大问题。这是我的 JavaScript: var library
这个问题在这里已经有了答案: Selecting and manipulating CSS pseudo-elements such as ::before and ::after using j
我在我的有向图中添加了一堆节点和顶点,使用设置 typedef boost::adjacency_list graph; 创建 Node有一个节点名称字符串,Edge它的分数有一个整数。我试图遍历所有
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 8 年前。 Improve
如何存储我在 NSUserDefaults 中创建的 Goal 类型的对象数组? ( swift ) 代码如下: func saveGoalList ( newGoalList : [Goal] ){
Array.prototype.indexOf 和 Date.now 已在 ES5 中引入。如果我编译存储在文件 test.ts 中的以下代码,为什么 Typescript 不能转译? Date.no
我正在阅读有关属性的内容,并了解到可以使用您的代码将它们应用于不同的目标实体 -(请参阅 Attribute Targets)。 因此,查看我项目中的 AssemblyInfo.cs 文件,我可以看到
给定一个 Makefile: all: build/a build/b build/c # need to change this to all: build/* build/a:
我有一个带有多框架目标的项目- netstandard2.0;net471 . 我想为 netframework 构建解决方案和 netstandard分别。 目前我使用这个 MSBuild 命令:
我是一名优秀的程序员,十分优秀!