René's URL Explorer Experiment


Title: Garbage collection: Free mostly everything automatically by implausible · Pull Request #1570 · nodegit/nodegit · GitHub

Open Graph Title: Garbage collection: Free mostly everything automatically by implausible · Pull Request #1570 · nodegit/nodegit

X Title: Garbage collection: Free mostly everything automatically by implausible · Pull Request #1570 · nodegit/nodegit

Description: Garbage Collection in LibGit2 So this is as much as I could glean. Memory models Reference counted Most objects that exist in the repository ODB or that extend from object are cached and reference counted. In order to ensure we are cleaning up memory for reference counted libgit2 objects, we should always call the provided libgit2 free method on the pointers when v8 garbage collects them. A lot of these reference counted objects have an underlying memory dependency with the repository, so the repository pointer will need to be kept around until the last call to the last object related to the repository has been freed. This means that most reference counted objects are owned by the repository. This class of objects will always call the free function, even if they have an owner. Borrowed pointers Borrowed pointers are like fields on a struct. They should never be freed. Instead, we should build an owner dependency on the v8 object that contains the struct that this borrowed pointer came from. This ownership dependency will keep the memory alive for as long as the borrowed pointer is alive. Borrowed, duplicable pointers Certain borrowed pointers (git_oid, git_signature...) are easily duplicable and may have provided duplication functions from libgit2. They may also be easily copied using memcpy. If a pointer is borrowed, but duplicable, no ownership relationship should be established. Instead, we should duplicate the memory and always free when v8 garbage collects us. Non reference counted, non duplicable, mega owners This mostly applies to the repository. The repository has a huge network of underlying relationships between the moment you git_repository_open. Almost every reference counted object has an underlying relationship with the repository via an odb cache or just plain having a field pointing back to the repository. Most reference counted objects will form an owned relationship with the repository. Unfortunately, there are several ways to get back to the same repository pointer that you got when you performed git_repository_open. That means that we need to keep track of how many times we've seen the repository. We now have an external reference counting mechanism to keep track of pointers like the repository. As new v8 objects get created that wrap the repository pointer, we reference count. When every v8 object that wraps the repository has been garbage collected, the last one to be collected will also perform the free method on the repository. I've currently flagged these as isSingleton and refer to them as such, but that is a silly name and I am open to suggestions (if I don't find a better name myself 😄). Additional behavior OwnerFn I've added a new field to the ownerFn in the descriptor.json. An example of the ownerFn is git_commit_owner. You pass it a commit pointer and it will give you the repository pointer that it is bound to. We now utilize these functions to generate a persistent handle to the repository. When a new commit is created, we bind it to the repository via git_commit_owner. As mentioned above, we will create a new v8 object wrapper around the repository handle and reference count it. This will at least guarantee that even though it's a different v8 object wrapper that we persist, it's still persisting the important underlying libgit2 pointer. ownedBy You can now specify ownedBy fields in arguments to instruct the descriptor that a particular argument from JS is the owner of a return result. This extends ownedByThis behavior by being more open to other ownership configurations than a this relationship. Need to do still Walk through documentation and ensure ownedBy is set on arguments at the appropriate place Callback memory management is still set to never free callback parameters. We will need to find out how to fish ownership details via the async payload. I am not sure if I want to complete this in this PR or push it into the future, as I imagine callbacks are a much smaller memory foot print than being able to free the repository. Write additional segfault tests like the ones seen in revwalk for the config, which is borderline similar to the repository, but not quite as complex. Write additional segfault tests in general utilizing the GC. Future work Maybe callback memory managent, depends on if we can get something simple done in this PR. Complex owner scenarios like git_filter. It would be nice if instead of having to write a full template, we would be capable of patching the HandleOKCallback with a custom owner resolver. It would be nice if we also had an overwrite block specifically targeting function calls in AsyncWorker::Execute. For an example of what I am referring to, check out generate/templates/manual/clone/clone.cc.

Open Graph Description: Garbage Collection in LibGit2 So this is as much as I could glean. Memory models Reference counted Most objects that exist in the repository ODB or that extend from object are cached and reference ...

X Description: Garbage Collection in LibGit2 So this is as much as I could glean. Memory models Reference counted Most objects that exist in the repository ODB or that extend from object are cached and reference ...

Opengraph URL: https://github.com/nodegit/nodegit/pull/1570

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:00e329f8-4bb1-6033-1ef1-a81f0bbc7317
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idDD08:2E83F4:87E2D9F:B927A6B:6A5E85F6
html-safe-nonce477411122d3fc0a871b222f307e333eb9c91fdfb03ea459d12462ff1cb9fa5ec
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJERDA4OjJFODNGNDo4N0UyRDlGOkI5MjdBNkI6NkE1RTg1RjYiLCJ2aXNpdG9yX2lkIjoiMzc0MzU3NjQwNzAyNjg2MTU1OCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmaccd1cdbdabb0e81427d8aa31b4c56e295a994d81536b078d8d53a33c7ce0fd6f5
hovercard-subject-tagpull_request:223442714
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/nodegit/nodegit/pull/1570/files
twitter:imagehttps://avatars.githubusercontent.com/u/5742591?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/5742591?s=400&v=4
og:image:altGarbage Collection in LibGit2 So this is as much as I could glean. Memory models Reference counted Most objects that exist in the repository ODB or that extend from object are cached and reference ...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Nonee0c30ec4bc4cc128be7eee7ef869507723a2ac9916267b7e0d370b3580a5e7ba
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/nodegit/nodegit git https://github.com/nodegit/nodegit.git
octolytics-dimension-user_id657068
octolytics-dimension-user_loginnodegit
octolytics-dimension-repository_id1383170
octolytics-dimension-repository_nwonodegit/nodegit
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1383170
octolytics-dimension-repository_network_root_nwonodegit/nodegit
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release68ef39d284f7f48d37e751bc9bc0a9a4166228d5
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/nodegit/nodegit/pull/1570/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fnodegit%2Fnodegit%2Fpull%2F1570%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
Code QualityEnforce quality at mergehttps://github.com/features/code-quality
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fnodegit%2Fnodegit%2Fpull%2F1570%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=nodegit%2Fnodegit
Reloadhttps://github.com/nodegit/nodegit/pull/1570/files
Reloadhttps://github.com/nodegit/nodegit/pull/1570/files
Reloadhttps://github.com/nodegit/nodegit/pull/1570/files
Please reload this pagehttps://github.com/nodegit/nodegit/pull/1570/files
nodegit https://github.com/nodegit
nodegithttps://github.com/nodegit/nodegit
Notifications https://github.com/login?return_to=%2Fnodegit%2Fnodegit
Fork 698 https://github.com/login?return_to=%2Fnodegit%2Fnodegit
Star 5.8k https://github.com/login?return_to=%2Fnodegit%2Fnodegit
Code https://github.com/nodegit/nodegit
Issues 343 https://github.com/nodegit/nodegit/issues
Pull requests 20 https://github.com/nodegit/nodegit/pulls
Actions https://github.com/nodegit/nodegit/actions
Projects https://github.com/nodegit/nodegit/projects
Security and quality 0 https://github.com/nodegit/nodegit/security
Insights https://github.com/nodegit/nodegit/pulse
Code https://github.com/nodegit/nodegit
Issues https://github.com/nodegit/nodegit/issues
Pull requests https://github.com/nodegit/nodegit/pulls
Actions https://github.com/nodegit/nodegit/actions
Projects https://github.com/nodegit/nodegit/projects
Security and quality https://github.com/nodegit/nodegit/security
Insights https://github.com/nodegit/nodegit/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fnodegit%2Fnodegit%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fnodegit%2Fnodegit%2Fissues%2Fnew%2Fchoose
implausiblehttps://github.com/implausible
nodegit:masterhttps://github.com/nodegit/nodegit/tree/master
implausible:garbage-collection/free-almost-everythinghttps://github.com/implausible/nodegit/tree/garbage-collection/free-almost-everything
Conversation 12 https://github.com/nodegit/nodegit/pull/1570
Commits 13 https://github.com/nodegit/nodegit/pull/1570/commits
Checks 0 https://github.com/nodegit/nodegit/pull/1570/checks
Files changed https://github.com/nodegit/nodegit/pull/1570/files
Please reload this pagehttps://github.com/nodegit/nodegit/pull/1570/files
Garbage collection: Free mostly everything automatically https://github.com/nodegit/nodegit/pull/1570/files#top
Show all changes 13 commits https://github.com/nodegit/nodegit/pull/1570/files
1be9c37 Clean up spacing in templates implausible Oct 12, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/1be9c3795e928ca193f047c2023ce910fe2f61e5
6419faf Enable setting arbitrary parameters as memory owner implausible Oct 12, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/6419fafa27d1128c64622f06cb50d370e0ca14cf
0135189 Update descriptor to handle more auto-gc behavior implausible Oct 17, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/013518971bbc50f2471b2fedf9227afaf365006e
2e5451f Add additional GC behavior that reflects new descriptor format implausible Oct 17, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/2e5451fcd0489f7d92ca8f5c74813e86569fd58b
a2388e3 git_filter_list has a complex owner scenario and requires adjustments implausible Oct 17, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/a2388e3ce4e990dd76229845323c7f5b5344187d
8c5d58b Move this inherited clone behavior into C++ land implausible Oct 17, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/8c5d58b3dea40ba0baf82616beeb355e60829c76
335cc01 Fix tests implausible Oct 17, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/335cc016930db51c8603da3e0605d36be132301c
340e245 Fix Node 6 builds on Mac OS not having `unordered_map` defined emmax86 Oct 17, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/340e245045082288622f8013358f196849bb888c
d685897 Improve ownership model implausible Oct 19, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/d6858971b5c227f3c7c23a707f42079dab869808
1e1b639 Ownership updates to descriptor and supplement implausible Oct 19, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/1e1b6394177671e6cfa643a558ba17235688a5c6
1f8fd84 assign owner to wrappers implausible Oct 19, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/1f8fd84bfaafb92acd470f309e8a1d48012b0eb9
ec91f71 Enable dup for any class with an ownerFn implausible Oct 19, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/ec91f71b396d5918b72486dd27e45ea7ec228e2f
a838ce8 Extraneous test implausible Oct 25, 2018 https://github.com/nodegit/nodegit/pull/1570/commits/a838ce8d88a82329ef3376149921e025d36d16d8
Clear filters https://github.com/nodegit/nodegit/pull/1570/files
Please reload this pagehttps://github.com/nodegit/nodegit/pull/1570/files
Please reload this pagehttps://github.com/nodegit/nodegit/pull/1570/files
descriptor.json https://github.com/nodegit/nodegit/pull/1570/files#diff-ff00cd010b7df4b1f1cd901205bce54d2c39c0752d2ab09b09bbe4a2ead48bf2
libgit2-supplement.json https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
fields_info.js https://github.com/nodegit/nodegit/pull/1570/files#diff-999aff66eaaf90cf0c3df2203c39145b98655611642e207b3df417ade2adfa45
returns_info.js https://github.com/nodegit/nodegit/pull/1570/files#diff-86973a70b38999886dc90266cdd76be008acb750b8ab3804470edf73a640ad3e
clone.cc https://github.com/nodegit/nodegit/pull/1570/files#diff-854536b4f706abc0168f78793c927000be50034ae5215d036b9edad5c1c11ea5
load.cc https://github.com/nodegit/nodegit/pull/1570/files#diff-8012e3986418309eaa45d0ec6c0788530b56f7a26e1bce084cba2b09466e1b97
nodegit_wrapper.h https://github.com/nodegit/nodegit/pull/1570/files#diff-dfb0c9a835318c24af3d01b8c2e0ed03fd59f29c8f8b354a9f4626cea9793a2f
reference_counter.h https://github.com/nodegit/nodegit/pull/1570/files#diff-452dab6f24539b370fba9badce7933a4e9f6513da00e13532bc3760eed3ce5f7
nodegit_wrapper.cc https://github.com/nodegit/nodegit/pull/1570/files#diff-5364109092d34ad251a0b954c5784d0f41c0b73ba2b854c45f2e74511eb55968
reference_counter.cc https://github.com/nodegit/nodegit/pull/1570/files#diff-144c409297dd1b6f35c5deccb2be55bd48cb28931a68ef172ce67e5a1c7ab5ad
async_function.cc https://github.com/nodegit/nodegit/pull/1570/files#diff-75aa5e6f48aaf84e3ba76da9670589713cd82043e55a5509e7c197742e5032ca
convert_to_v8.cc https://github.com/nodegit/nodegit/pull/1570/files#diff-844fb3431ed2a525508be43f537de510b570829d8f15227f514ca2be47518797
sync_function.cc https://github.com/nodegit/nodegit/pull/1570/files#diff-7e46711f90e3a938b09d4bcdae2249b1b8811f3511280569536d86aa8ee250c6
traits.h https://github.com/nodegit/nodegit/pull/1570/files#diff-66aacff7877810fbb16dc1ca6e19d51b9824f699d78ff787e065c1cbb90e16f3
binding.gyp https://github.com/nodegit/nodegit/pull/1570/files#diff-e4864b3e985981d1b9cc4dbd855f8eab136659d24d7996a19acf61e8b38e1aa6
class_header.h https://github.com/nodegit/nodegit/pull/1570/files#diff-25ee49e4f3bdf45b52b23f17fb4fed35cd78702ba9e670d4f51cdfee3ae4296a
struct_header.h https://github.com/nodegit/nodegit/pull/1570/files#diff-46b0fc4d3930421a977f56345238c15ad1e71654d1a831d9a011f8ca1784181d
clone.js https://github.com/nodegit/nodegit/pull/1570/files#diff-c269a448a4993c928b0f6d11a98b67c0a397437daa7cddbce7615b7851a34e53
repository.js https://github.com/nodegit/nodegit/pull/1570/files#diff-a5a24674185f8dddf909d0208f70be34ba44b2a6070948169ac766671a185ddc
annotated_commit.js https://github.com/nodegit/nodegit/pull/1570/files#diff-f07865a0e0d43b5c21027126534382a51fd97e816e0d0a63b0665e62c5c2bd70
filter.js https://github.com/nodegit/nodegit/pull/1570/files#diff-507c9f40a0ab60c73be97ab4793a9f5c4a44895cd6303785045381b90790f9eb
patch.js https://github.com/nodegit/nodegit/pull/1570/files#diff-27f9c6849d61624957f9815993165da66283c353152f9fdfe8c925770474847f
generate/input/descriptor.jsonhttps://github.com/nodegit/nodegit/pull/1570/files#diff-ff00cd010b7df4b1f1cd901205bce54d2c39c0752d2ab09b09bbe4a2ead48bf2
View file https://github.com/implausible/nodegit/blob/a838ce8d88a82329ef3376149921e025d36d16d8/generate/input/descriptor.json
Open in desktop https://desktop.github.com
Please reload this pagehttps://github.com/nodegit/nodegit/pull/1570/files
generate/input/libgit2-supplement.jsonhttps://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
View file https://github.com/implausible/nodegit/blob/a838ce8d88a82329ef3376149921e025d36d16d8/generate/input/libgit2-supplement.json
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/nodegit/nodegit/pull/1570/{{ revealButtonHref }}
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
https://github.com/nodegit/nodegit/pull/1570/files#diff-0da734fe4be22b8604123d9d8791bc1b0a32d7dc724fcaab72aaae27c57853d2
generate/templates/filters/fields_info.jshttps://github.com/nodegit/nodegit/pull/1570/files#diff-999aff66eaaf90cf0c3df2203c39145b98655611642e207b3df417ade2adfa45
View file https://github.com/implausible/nodegit/blob/a838ce8d88a82329ef3376149921e025d36d16d8/generate/templates/filters/fields_info.js
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/nodegit/nodegit/pull/1570/{{ revealButtonHref }}
https://github.com/nodegit/nodegit/pull/1570/files#diff-999aff66eaaf90cf0c3df2203c39145b98655611642e207b3df417ade2adfa45
https://github.com/nodegit/nodegit/pull/1570/files#diff-999aff66eaaf90cf0c3df2203c39145b98655611642e207b3df417ade2adfa45
generate/templates/filters/returns_info.jshttps://github.com/nodegit/nodegit/pull/1570/files#diff-86973a70b38999886dc90266cdd76be008acb750b8ab3804470edf73a640ad3e
View file https://github.com/implausible/nodegit/blob/a838ce8d88a82329ef3376149921e025d36d16d8/generate/templates/filters/returns_info.js
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/nodegit/nodegit/pull/1570/{{ revealButtonHref }}
https://github.com/nodegit/nodegit/pull/1570/files#diff-86973a70b38999886dc90266cdd76be008acb750b8ab3804470edf73a640ad3e
https://github.com/nodegit/nodegit/pull/1570/files#diff-86973a70b38999886dc90266cdd76be008acb750b8ab3804470edf73a640ad3e
https://github.com/nodegit/nodegit/pull/1570/files#diff-86973a70b38999886dc90266cdd76be008acb750b8ab3804470edf73a640ad3e
https://github.com/nodegit/nodegit/pull/1570/files#diff-86973a70b38999886dc90266cdd76be008acb750b8ab3804470edf73a640ad3e
Please reload this pagehttps://github.com/nodegit/nodegit/pull/1570/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.