1<!DOCTYPE html><!--m8uLpaBsII_xbyNbedCYC--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/8b593ed445944a7d.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/07eca83240ccd534.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/8461fbc32211d9a5.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/1897729bcd380285.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/b2810e3ad6fe3e95.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-bca7d88b6abf4c7d.js"/>
1<script src="/_next/static/chunks/4bd1b696-f785427dddbba9fb.js" async=""></script>
1<script src="/_next/static/chunks/1255-a390e12b70b4a9fb.js" async=""></script>
1<script src="/_next/static/chunks/main-app-5eb0d9c55a395822.js" async=""></script>
1<script src="/_next/static/chunks/2619-3c9e02e22d10480a.js" async=""></script>
1<script src="/_next/static/chunks/app/error-f77c25e283aed53d.js" async=""></script>
1<script src="/_next/static/chunks/app/not-found-28c7a1326fc0a5fc.js" async=""></script>
1<script src="/_next/static/chunks/app/layout-40c99f76d10c6771.js" async=""></script>
1<script src="/_next/static/chunks/1356-fc0c3343d3daff4e.js" async=""></script>
1<script src="/_next/static/chunks/app/projects/page-e209b363055c982b.js" async=""></script>
1<title>Projects - Edward Thomson</title><meta name="description" content="libgit2, Test Summary Action, git-recover, and more software projects by Edward Thomson"/><link rel="icon" href="/favicon.ico" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/icon.png?fb3cb5d58eaf76a3" type="image/png" sizes="256x256"/>
1<script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script>
1</head><body><div hidden=""><!--$--><!--/$--></div><div class="page_page__4Kseh common_page__S2dJ1"><header class="header_header__zJOD0"><div class="header_container__ZGWKO page_headerContainer__bk03W common_headerContainer__WOEi_"><div class="header_headerLogo__oODJk"><div class="logo_logo__8FrRD"><div><a href="/"><svg aria-hidden="true" role="img" class="logo_logoIcon__mWjC8" viewBox="0 0 16 16" width="1.7rem" height="1.7rem" fill="currentColor"><path fill-rule="evenodd" d="M5 3.254V3.25v.005a.75.75 0 110-.005v.004zm.45 1.9a2.25 2.25 0 10-1.95.218v5.256a2.25 2.25 0 101.5 0V7.123A5.735 5.735 0 009.25 9h1.378a2.251 2.251 0 100-1.5H9.25a4.25 4.25 0 01-3.8-2.346zM12.75 9a.75.75 0 100-1.5.75.75 0 000 1.5zm-8.5 4.5a.75.75 0 100-1.5.75.75 0 000 1.5z"></path></svg><div class="logo_logoText__GLImi">Edward Thomson</div></a></div></div></div><nav class="header_headerLinks__0w4mj"><ul><li><a href="/about">About</a></li><li><a href="/projects">Projects</a></li><li><a href="/blog">Blog</a></li><li><a href="/contact">Contact</a></li></ul></nav></div></header><main class="page_main__X1K_V common_main__y0GP6"><div class="page_mainContainer__Ax87F common_mainContainer__xKHk_"><h1>Projects</h1><a href="https://github.com/libgit2/libgit2" class="page_libgit2Link__PlgrL"><div class="page_libgit2__c_lZk"><div><div class="page_libgit2Explanation__nlFce"><h2>libgit2</h2><p>A cross-platform, linkable library implementation of Git that you can use in your application with bindings for your favorite programming or scripting language. Used by many popular Git clients, and all the Git hosting providers.</p></div></div><div class="page_libgit2Demo__vpEaP"><div class="code_example_window__Ui1QD libgit2_demo_libgit2Example__5LBp_"><div class="code_example_titlebar__HVGzL"><div class="code_example_buttonClose___vPuy code_example_button__s5gdH"></div><div class="code_example_buttonMinimize__fIwvD code_example_button__s5gdH"></div><div class="code_example_buttonMaximize__DoBRx code_example_button__s5gdH"></div><div class="code_example_filename__n_ud7">merge_pullrequest.c</div></div><div class="code_example_code___7yUg"><div class="code_example_numberColumn__Qns4F"><div class="code_example_number__fP72c"><code>1</code></div><div class="code_example_number__fP72c"><code>2</code></div><div class="code_example_number__fP72c"><code>3</code></div><div class="code_example_number__fP72c"><code>4</code></div><div class="code_example_number__fP72c"><code>5</code></div><div class="code_example_number__fP72c"><code>6</code></div><div class="code_example_number__fP72c"><code>7</code></div><div class="code_example_number__fP72c"><code>8</code></div><div class="code_example_number__fP72c"><code>9</code></div></div><div class="code_example_textColumn__WPIKN"><div class="code_example_text__tYb9T"><code><span class="libgit2_demo_function__jKmlA">git_merge_trees(</span>&result, repo, &ancestor, &head, &pull_request, &merge_opts<span class="libgit2_demo_function__jKmlA">);</span></code></div><div class="code_example_text__tYb9T"><code></code></div><div class="code_example_text__tYb9T"><code>if (<span class="libgit2_demo_function__jKmlA">git_index_has_conflicts(</span>result<span class="libgit2_demo_function__jKmlA">)</span>) <!-- -->{</code></div><div class="code_example_text__tYb9T"><code><span class="libgit2_demo_indent__DJVzk"></span><span class="libgit2_demo_comment__R2LzB">/* Pull request cannot be merged; conflicts exist. */</span></code></div><div class="code_example_text__tYb9T"><code><span class="libgit2_demo_indent__DJVzk"></span>return <span class="libgit2_demo_boolean__VCqtv">false</span>;</code></div><div class="code_example_text__tYb9T"><code>}</code></div><div class="code_example_text__tYb9T"><code></code></div><div class="code_example_text__tYb9T"><code><span class="libgit2_demo_function__jKmlA">git_index_write_tree(</span>&tree_id, result<span class="libgit2_demo_function__jKmlA">);</span></code></div><div class="code_example_text__tYb9T"><code><span class="libgit2_demo_function__jKmlA">git_commit_create(</span>&commit_id, repo, "HEAD", merge_user, merge_user, NULL, message, &tree_id, 1, head<span class="libgit2_demo_function__jKmlA">);</span></code></div></div></div></div><div class="window_window__4Sni3 libgit2_demo_mergeWindow__hJwxE"><div class="window_titlebar__djVl1" aria-hidden="true"><div class="window_buttonClose__QjqFm window_button__ClSuF"></div><div class="window_buttonMinimize__B_m8T window_button__ClSuF"></div><div class="window_buttonMaximize__3k_Vy window_button__ClSuF"></div><div class="window_browserUrlContainer__Chwfi"><div class="window_browserUrl__VgVk1">github.com<span><img alt="" loading="lazy" width="256" height="256" decoding="async" data-nimg="1" class="window_browserRefresh__bFXs1" style="color:transparent" src="/_next/static/media/refresh.51d7a21c.svg"/></span></div></div></div><div class="window_contents__oalF4"><div class="libgit2_demo_mergeContents__fmrCO"><div class="libgit2_demo_mergeConflicts__ZA0Yj"><div class="libgit2_demo_mergeCheck__8Rg3T"></div><div class="libgit2_demo_mergeExplanation___z_h2">Merging can be performed automatically.</div></div><div class="libgit2_demo_mergeContainer__hcJYw"><div class="libgit2_demo_mergeButton__4pTqy"><div class="libgit2_demo_mergeButtonText__mCfZp">Merge pull request</div><div class="libgit2_demo_mergeButtonIcon__bLx4B"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" fill="currentColor"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></div></div></div></div></div></div></div></div></a><a href="https://github.com/test-summary/action" class="page_testsummaryLink__8orvZ"><div class="page_testsummary__rHqaC"><div><div class="page_testsummaryExplanation__YwI7Y"><h2>Test Summary Action</h2><p>Add useful unit test results summaries for GitHub Actions CI/CD workflows. Parses JUnit and tap style output across multiple files and test runs.</p></div></div><div class="page_testsummaryDemo__iUztM"><div class="window_window__4Sni3 testsummary_demo_testsummaryWindow___72ME"><div class="window_titlebar__djVl1" aria-hidden="true"><div class="window_buttonClose__QjqFm window_button__ClSuF"></div><div class="window_buttonMinimize__B_m8T window_button__ClSuF"></div><div class="window_buttonMaximize__3k_Vy window_button__ClSuF"></div><div class="window_browserUrlContainer__Chwfi"><div class="window_browserUrl__VgVk1">github.com<span><img alt="" loading="lazy" width="256" height="256" decoding="async" data-nimg="1" class="window_browserRefresh__bFXs1" style="color:transparent" src="/_next/static/media/refresh.51d7a21c.svg"/></span></div></div></div><div class="window_contents__oalF4"><div class="testsummary_demo_testsummaryArtifacts___U7yj"></div><div class="testsummary_demo_testsummaryContainer__jAVXI"><div class="testsummary_demo_testsummarySection__wC1kM"><div class="testsummary_demo_testsummaryTitle__kVQhU">Test results summary</div><div class="testsummary_demo_testsummaryResults__3mps4"><img alt="" loading="lazy" width="500" height="42" decoding="async" data-nimg="1" style="color:transparent" src="/_next/static/media/test-summary-light.7079e51c.svg"/></div></div></div></div></div></div></div></a><a href="https://github4life.herokuapp.com/ethomson" class="page_github4lifeLink__g_mvP"><div class="page_github4life__DKzxk"><div><div class="page_github4lifeExplanation__ebCYj"><h2>GitHub 4 Life</h2><p>Your GitHub contribution graph as a four color game of life. A silly example of how to add dynamic content to your GitHub profile page. (Previously featured on GitHub's home page.)</p></div></div><div class="window_window__4Sni3 page_github4lifeDemo__qm0bD"><div class="window_titlebar__djVl1" aria-hidden="true"><div class="window_buttonClose__QjqFm window_button__ClSuF"></div><div class="window_buttonMinimize__B_m8T window_button__ClSuF"></div><div class="window_buttonMaximize__3k_Vy window_button__ClSuF"></div><div class="window_browserUrlContainer__Chwfi"><div class="window_browserUrl__VgVk1">github.com<span><img alt="" loading="lazy" width="256" height="256" decoding="async" data-nimg="1" class="window_browserRefresh__bFXs1" style="color:transparent" src="/_next/static/media/refresh.51d7a21c.svg"/></span></div></div></div><div class="window_contents__oalF4"><div class="page_github4lifeGame__FmHEV"></div></div></div></div></a><div class="page_other__wF02y"><h2>Other Projects</h2><ul><li class="page_cve__h___A"><a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-41032"><span class="page_otherHeader__Srdsz"></span><span class="page_otherName__p79uv">CVE 2022-41032</span><span class="page_otherDescription__sEqHt">A privilege escalation attack for .NET and NuGet (responsibly disclosed).</span></a></li><li class="page_dogged__PmdL7"><a href="https://github.com/dogged/dogged"><span class="page_otherHeader__Srdsz"></span><span class="page_otherName__p79uv">Dogged</span><span class="page_otherDescription__sEqHt">The future of Git for .NET: hyper-efficient .NET Core wrappers for libgit2.</span></a></li><li class="page_gitrecover__0hhjO"><a href="https://github.com/ethomson/git-recover"><span class="page_otherHeader__Srdsz"></span><span class="page_otherName__p79uv">git-recover</span><span class="page_otherDescription__sEqHt">Like undelete for your git repository, recovers content that has gone missing.</span></a></li><li class="page_ntlmclient__9ZMVC"><a href="https://github.com/ethomson/ntlmclient"><span class="page_otherHeader__Srdsz"></span><span class="page_otherName__p79uv">ntlmclient</span><span class="page_otherDescription__sEqHt">A POSIX implementation of NTLM2 client authentication for AD authentication.</span></a></li><li class="page_issuedashboard__BrkMj"><a href="https://github.com/ethomson/issue-dashboard"><span class="page_otherHeader__Srdsz"></span><span class="page_otherName__p79uv">Issue Dashboard</span><span class="page_otherDescription__sEqHt">A customizable dashboard for GitHub issues and pull requests.</span></a></li><li class="page_adopt__OfBrd"><a href="https://github.com/ethomson/adopt"><span class="page_otherHeader__Srdsz"></span><span class="page_otherName__p79uv">adopt</span><span class="page_otherDescription__sEqHt">A portable command-line argument parser for C applications.</span></a></li></ul></div></div></main><footer class="footer_footer__mqdak"><div class="undefined page_footerContainer__P5cFX common_footerContainer__QioSt">Copyright © Edward Thomson. All rights reserved.</div></footer></div><!--$--><!--/$-->
1<script src="/_next/static/chunks/webpack-bca7d88b6abf4c7d.js" id="_R_" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0])</script>
1<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9766,[],\"\"]\n3:I[9269,[\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"8039\",\"static/chunks/app/error-f77c25e283aed53d.js\"],\"default\"]\n4:I[8924,[],\"\"]\n5:I[4279,[\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"4345\",\"static/chunks/app/not-found-28c7a1326fc0a5fc.js\"],\"default\"]\n6:I[9616,[\"7177\",\"static/chunks/app/layout-40c99f76d10c6771.js\"],\"Analytics\"]\n7:I[5943,[\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"1356\",\"static/chunks/1356-fc0c3343d3daff4e.js\",\"893\",\"static/chunks/app/projects/page-e209b363055c982b.js\"],\"default\"]\n1c:I[7150,[],\"\"]\n:HL[\"/_next/static/css/8b593ed445944a7d.css\",\"style\"]\n:HL[\"/_next/static/css/07eca83240ccd534.css\",\"style\"]\n:HL[\"/_next/static/css/8461fbc32211d9a5.css\",\"style\"]\n:HL[\"/_next/static/css/1897729bcd380285.css\",\"style\"]\n:HL[\"/_next/static/css/b2810e3ad6fe3e95.css\",\"style\"]\n"])</script>
1<script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"m8uLpaBsII_xbyNbedCYC\",\"p\":\"\",\"c\":[\"\",\"projects\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"projects\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/8b593ed445944a7d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"children\":[[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/07eca83240ccd534.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/8461fbc32211d9a5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/02610034af36bfc3.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L5\",null,{}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/07eca83240ccd534.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/8461fbc32211d9a5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/0251792965e27d1d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L6\",null,{}]]}]}]]}],{\"children\":[\"projects\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"className\":\"page_page__4Kseh common_page__S2dJ1\",\"children\":[[\"$\",\"$L7\",null,{\"className\":\"$undefined\",\"containerClassName\":\"page_headerContainer__bk03W common_headerContainer__WOEi_\"}],[\"$\",\"main\",null,{\"className\":\"page_main__X1K_V common_main__y0GP6\",\"children\":[\"$\",\"div\",null,{\"className\":\"page_mainContainer__Ax87F common_mainContainer__xKHk_\",\"children\":[[\"$\",\"h1\",null,{\"children\":\"Projects\"}],[\"$\",\"a\",null,{\"href\":\"https://github.com/libgit2/libgit2\",\"className\":\"page_libgit2Link__PlgrL\",\"children\":[\"$\",\"div\",null,{\"className\":\"page_libgit2__c_lZk\",\"children\":[[\"$\",\"div\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"page_libgit2Explanation__nlFce\",\"children\":[[\"$\",\"h2\",null,{\"children\":\"libgit2\"}],[\"$\",\"p\",null,{\"children\":\"A cross-platform, linkable library implementation of Git that you can use in your application with bindings for your favorite programming or scripting language. Used by many popular Git clients, and all the Git hosting providers.\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"page_libgit2Demo__vpEaP\",\"children\":[[\"$\",\"div\",null,{\"className\":\"code_example_window__Ui1QD libgit2_demo_libgit2Example__5LBp_\",\"children\":[[\"$\",\"div\",null,{\"className\":\"code_example_titlebar__HVGzL\",\"children\":[[\"$\",\"div\",null,{\"className\":\"code_example_buttonClose___vPuy code_example_button__s5gdH\"}],[\"$\",\"div\",null,{\"className\":\"code_example_buttonMinimize__fIwvD code_example_button__s5gdH\"}],[\"$\",\"div\",null,{\"className\":\"code_example_buttonMaximize__DoBRx code_example_button__s5gdH\"}],[\"$\",\"div\",null,{\"className\":\"code_example_filename__n_ud7\",\"children\":\"merge_pullrequest.c\"}]]}],[\"$\",\"div\",null,{\"className\":\"code_example_code___7yUg\",\"children\":[[\"$\",\"div\",null,{\"className\":\"code_example_numberColumn__Qns4F\",\"children\":[[\"$\",\"div\",\"0\",{\"className\":\"code_example_number__fP72c\",\"children\":[\"$\",\"code\",null,{\"children\":1}]}],[\"$\",\"div\",\"1\",{\"className\":\"code_example_number__fP72c\",\"children\":[\"$\",\"code\",null,{\"children\":2}]}],[\"$\",\"div\",\"2\",{\"className\":\"code_example_number__fP72c\",\"children\":[\"$\",\"code\",null,{\"children\":3}]}],[\"$\",\"div\",\"3\",{\"className\":\"code_example_number__fP72c\",\"children\":[\"$\",\"code\",null,{\"children\":4}]}],[\"$\",\"div\",\"4\",{\"className\":\"code_example_number__fP72c\",\"children\":[\"$\",\"code\",null,{\"children\":5}]}],[\"$\",\"div\",\"5\",{\"className\":\"code_example_number__fP72c\",\"children\":[\"$\",\"code\",null,{\"children\":6}]}],[\"$\",\"div\",\"6\",{\"className\":\"code_example_number__fP72c\",\"children\":[\"$\",\"code\",null,{\"children\":7}]}],[\"$\",\"div\",\"7\",{\"className\":\"code_example_number__fP72c\",\"children\":[\"$\",\"code\",null,{\"children\":8}]}],[\"$\",\"div\",\"8\",{\"className\":\"code_example_number__fP72c\",\"children\":[\"$\",\"code\",null,{\"children\":9}]}]]}],[\"$\",\"div\",null,{\"className\":\"code_example_textColumn__WPIKN\",\"children\":[[\"$\",\"div\",\"0\",{\"className\":\"code_example_text__tYb9T\",\"children\":\"$L8\"}],\"$L9\",\"$La\",\"$Lb\",\"$Lc\",\"$Ld\",\"$Le\",\"$Lf\",\"$L10\"]}]]}]]}],\"$L11\"]}]]}]}],\"$L12\",\"$L13\",\"$L14\"]}]}],\"$L15\"]}],[\"$L16\",\"$L17\",\"$L18\",\"$L19\"],\"$L1a\"]}],{}
1,null,false]},null,false]},null,false],\"$L1b\",false]],\"m\":\"$undefined\",\"G\":[\"$1c\",[]],\"s\":false,\"S\":true}\n"])</script>
1<script>self.__next_f.push([1,"1d:I[1356,[\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"1356\",\"static/chunks/1356-fc0c3343d3daff4e.js\",\"893\",\"static/chunks/app/projects/page-e209b363055c982b.js\"],\"Image\"]\n1e:I[5550,[\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js\",\"1356\",\"static/chunks/1356-fc0c3343d3daff4e.js\",\"893\",\"static/chunks/app/projects/page-e209b363055c982b.js\"],\"default\"]\n1f:I[4431,[],\"OutletBoundary\"]\n21:I[5278,[],\"AsyncMetadataOutlet\"]\n23:I[4431,[],\"ViewportBoundary\"]\n25:I[4431,[],\"MetadataBoundary\"]\n26:\"$Sreact.suspense\"\n8:[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"libgit2_demo_function__jKmlA\",\"children\":\"git_merge_trees(\"}],\"\u0026result, repo, \u0026ancestor, \u0026head, \u0026pull_request, \u0026merge_opts\",[\"$\",\"span\",null,{\"className\":\"libgit2_demo_function__jKmlA\",\"children\":\");\"}]]}]\n9:[\"$\",\"div\",\"1\",{\"className\":\"code_example_text__tYb9T\",\"children\":[\"$\",\"code\",null,{}]}]\na:[\"$\",\"div\",\"2\",{\"className\":\"code_example_text__tYb9T\",\"children\":[\"$\",\"code\",null,{\"children\":[\"if (\",[\"$\",\"span\",null,{\"className\":\"libgit2_demo_function__jKmlA\",\"children\":\"git_index_has_conflicts(\"}],\"result\",[\"$\",\"span\",null,{\"className\":\"libgit2_demo_function__jKmlA\",\"children\":\")\"}],\") \",\"{\"]}]}]\nb:[\"$\",\"div\",\"3\",{\"className\":\"code_example_text__tYb9T\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"libgit2_demo_indent__DJVzk\"}],[\"$\",\"span\",null,{\"className\":\"libgit2_demo_comment__R2LzB\",\"children\":\"/* Pull request cannot be merged; conflicts exist. */\"}]]}]}]\nc:[\"$\",\"div\",\"4\",{\"className\":\"code_example_text__tYb9T\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"libgit2_demo_indent__DJVzk\"}],\"return \",[\"$\",\"span\",null,{\"className\":\"libgit2_demo_boolean__VCqtv\",\"children\":\"false\"}],\";\"]}]}]\nd:[\"$\",\"div\",\"5\",{\"className\":\"code_example_text__tYb9T\",\"children\":[\"$\",\"code\",null,{\"children\":\"}\"}]}]\ne:[\"$\",\"div\",\"6\",{\"className\":\"code_example_text__tYb9T\",\"children\":[\"$\",\"code\",null,{}]}]\nf:[\"$\",\"div\",\"7\",{\"className\":\"code_example_text__tYb9T\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"class"])</script>
1<script>self.__next_f.push([1,"Name\":\"libgit2_demo_function__jKmlA\",\"children\":\"git_index_write_tree(\"}],\"\u0026tree_id, result\",[\"$\",\"span\",null,{\"className\":\"libgit2_demo_function__jKmlA\",\"children\":\");\"}]]}]}]\n10:[\"$\",\"div\",\"8\",{\"className\":\"code_example_text__tYb9T\",\"children\":[\"$\",\"code\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"libgit2_demo_function__jKmlA\",\"children\":\"git_commit_create(\"}],\"\u0026commit_id, repo, \\\"HEAD\\\", merge_user, merge_user, NULL, message, \u0026tree_id, 1, head\",[\"$\",\"span\",null,{\"className\":\"libgit2_demo_function__jKmlA\",\"children\":\");\"}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"11:[\"$\",\"div\",null,{\"className\":\"window_window__4Sni3 libgit2_demo_mergeWindow__hJwxE\",\"children\":[[\"$\",\"div\",null,{\"className\":\"window_titlebar__djVl1\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"div\",null,{\"className\":\"window_buttonClose__QjqFm window_button__ClSuF\"}],[\"$\",\"div\",null,{\"className\":\"window_buttonMinimize__B_m8T window_button__ClSuF\"}],[\"$\",\"div\",null,{\"className\":\"window_buttonMaximize__3k_Vy window_button__ClSuF\"}],[\"$\",\"div\",null,{\"className\":\"window_browserUrlContainer__Chwfi\",\"children\":[\"$\",\"div\",null,{\"className\":\"window_browserUrl__VgVk1\",\"children\":[\"github.com\",[\"$\",\"span\",null,{\"className\":\"$undefined\",\"children\":[\"$\",\"$L1d\",null,{\"src\":{\"src\":\"/_next/static/media/refresh.51d7a21c.svg\",\"height\":256,\"width\":256,\"blurWidth\":0,\"blurHeight\":0},\"alt\":\"\",\"className\":\"window_browserRefresh__bFXs1\"}]}]]}]}]]}],[\"$\",\"div\",null,{\"className\":\"window_contents__oalF4\",\"children\":[\"$\",\"div\",null,{\"className\":\"libgit2_demo_mergeContents__fmrCO\",\"children\":[[\"$\",\"div\",null,{\"className\":\"libgit2_demo_mergeConflicts__ZA0Yj\",\"children\":[[\"$\",\"div\",null,{\"className\":\"libgit2_demo_mergeCheck__8Rg3T\"}],[\"$\",\"div\",null,{\"className\":\"libgit2_demo_mergeExplanation___z_h2\",\"children\":\"Merging can be performed automatically.\"}]]}],[\"$\",\"div\",null,{\"className\":\"libgit2_demo_mergeContainer__hcJYw\",\"children\":[\"$\",\"div\",null,{\"className\":\"libgit2_demo_mergeButton__4pTqy\",\"children\":[[\"$\",\"div\",null,{\"className\":\"libgit2_demo_mergeButtonText__mCfZp\",\"children\":\"Merge pull request\"}],[\"$\",\"div\",null,{\"className\":\"libgit2_demo_mergeButtonIcon__bLx4B\",\"children\":[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 16 16\",\"width\":\"16\",\"height\":\"16\",\"fill\":\"currentColor\",\"children\":[\"$\",\"path\",null,{\"d\":\"m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z\"}]}]}]]}]}]]}]}]]}]\n"])</script>
1<script>self.__next_f.push([1,"12:[\"$\",\"a\",null,{\"href\":\"https://github.com/test-summary/action\",\"className\":\"page_testsummaryLink__8orvZ\",\"children\":[\"$\",\"div\",null,{\"className\":\"page_testsummary__rHqaC\",\"children\":[[\"$\",\"div\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"page_testsummaryExplanation__YwI7Y\",\"children\":[[\"$\",\"h2\",null,{\"children\":\"Test Summary Action\"}],[\"$\",\"p\",null,{\"children\":\"Add useful unit test results summaries for GitHub Actions CI/CD workflows. Parses JUnit and tap style output across multiple files and test runs.\"}]]}]}],[\"$\",\"$L1e\",null,{\"className\":\"page_testsummaryDemo__iUztM\"}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"13:[\"$\",\"a\",null,{\"href\":\"https://github4life.herokuapp.com/ethomson\",\"className\":\"page_github4lifeLink__g_mvP\",\"children\":[\"$\",\"div\",null,{\"className\":\"page_github4life__DKzxk\",\"children\":[[\"$\",\"div\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"page_github4lifeExplanation__ebCYj\",\"children\":[[\"$\",\"h2\",null,{\"children\":\"GitHub 4 Life\"}],[\"$\",\"p\",null,{\"children\":\"Your GitHub contribution graph as a four color game of life. A silly example of how to add dynamic content to your GitHub profile page. (Previously featured on GitHub's home page.)\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"window_window__4Sni3 page_github4lifeDemo__qm0bD\",\"children\":[[\"$\",\"div\",null,{\"className\":\"window_titlebar__djVl1\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"div\",null,{\"className\":\"window_buttonClose__QjqFm window_button__ClSuF\"}],[\"$\",\"div\",null,{\"className\":\"window_buttonMinimize__B_m8T window_button__ClSuF\"}],[\"$\",\"div\",null,{\"className\":\"window_buttonMaximize__3k_Vy window_button__ClSuF\"}],[\"$\",\"div\",null,{\"className\":\"window_browserUrlContainer__Chwfi\",\"children\":[\"$\",\"div\",null,{\"className\":\"window_browserUrl__VgVk1\",\"children\":[\"github.com\",[\"$\",\"span\",null,{\"className\":\"$undefined\",\"children\":[\"$\",\"$L1d\",null,{\"src\":\"$11:props:children:0:props:children:3:props:children:props:children:1:props:children:props:src\",\"alt\":\"\",\"className\":\"window_browserRefresh__bFXs1\"}]}]]}]}]]}],[\"$\",\"div\",null,{\"className\":\"window_contents__oalF4\",\"children\":[\"$\",\"div\",null,{\"className\":\"page_github4lifeGame__FmHEV\"}]}]]}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"14:[\"$\",\"div\",null,{\"className\":\"page_other__wF02y\",\"children\":[[\"$\",\"h2\",null,{\"children\":\"Other Projects\"}],[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"className\":\"page_cve__h___A\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-41032\",\"children\":[[\"$\",\"span\",null,{\"className\":\"page_otherHeader__Srdsz\"}],[\"$\",\"span\",null,{\"className\":\"page_otherName__p79uv\",\"children\":\"CVE 2022-41032\"}],[\"$\",\"span\",null,{\"className\":\"page_otherDescription__sEqHt\",\"children\":\"A privilege escalation attack for .NET and NuGet (responsibly disclosed).\"}]]}]}],[\"$\",\"li\",null,{\"className\":\"page_dogged__PmdL7\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://github.com/dogged/dogged\",\"children\":[[\"$\",\"span\",null,{\"className\":\"page_otherHeader__Srdsz\"}],[\"$\",\"span\",null,{\"className\":\"page_otherName__p79uv\",\"children\":\"Dogged\"}],[\"$\",\"span\",null,{\"className\":\"page_otherDescription__sEqHt\",\"children\":\"The future of Git for .NET: hyper-efficient .NET Core wrappers for libgit2.\"}]]}]}],[\"$\",\"li\",null,{\"className\":\"page_gitrecover__0hhjO\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://github.com/ethomson/git-recover\",\"children\":[[\"$\",\"span\",null,{\"className\":\"page_otherHeader__Srdsz\"}],[\"$\",\"span\",null,{\"className\":\"page_otherName__p79uv\",\"children\":\"git-recover\"}],[\"$\",\"span\",null,{\"className\":\"page_otherDescription__sEqHt\",\"children\":\"Like undelete for your git repository, recovers content that has gone missing.\"}]]}]}],[\"$\",\"li\",null,{\"className\":\"page_ntlmclient__9ZMVC\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://github.com/ethomson/ntlmclient\",\"children\":[[\"$\",\"span\",null,{\"className\":\"page_otherHeader__Srdsz\"}],[\"$\",\"span\",null,{\"className\":\"page_otherName__p79uv\",\"children\":\"ntlmclient\"}],[\"$\",\"span\",null,{\"className\":\"page_otherDescription__sEqHt\",\"children\":\"A POSIX implementation of NTLM2 client authentication for AD authentication.\"}]]}]}],[\"$\",\"li\",null,{\"className\":\"page_issuedashboard__BrkMj\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://github.com/ethomson/issue-dashboard\",\"children\":[[\"$\",\"span\",null,{\"className\":\"page_otherHeader__Srdsz\"}],[\"$\",\"span\",null,{\"className\":\"page_otherName__p79uv\",\"children\":\"Issue Dashboard\"}],[\"$\",\"span\",null,{\"className\":\"page_otherDescription__sEqHt\",\"children\":\"A customizable dashboard for GitHub issues and pull requests.\"}]]}]}],[\"$\",\"li\",null,{\"className\":\"page_adopt__OfBrd\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://github.com/ethomson/adopt\",\"children\":[[\"$\",\"span\",null,{\"className\":\"page_otherHeader__Srdsz\"}],[\"$\",\"span\",null,{\"className\":\"page_otherName__p79uv\",\"children\":\"adopt\"}],[\"$\",\"span\",null,{\"className\":\"page_otherDescription__sEqHt\",\"children\":\"A portable command-line argument parser for C applications.\"}]]}]}]]}]]}]\n"])</script>
1<script>self.__next_f.push([1,"15:[\"$\",\"footer\",null,{\"className\":\"footer_footer__mqdak\",\"children\":[\"$\",\"div\",null,{\"className\":\"undefined page_footerContainer__P5cFX common_footerContainer__QioSt\",\"children\":\"Copyright © Edward Thomson. All rights reserved.\"}]}]\n16:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/07eca83240ccd534.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n17:[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/8461fbc32211d9a5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n18:[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1897729bcd380285.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n19:[\"$\",\"link\",\"3\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/b2810e3ad6fe3e95.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n1a:[\"$\",\"$L1f\",null,{\"children\":[\"$L20\",[\"$\",\"$L21\",null,{\"promise\":\"$@22\"}]]}]\n1b:[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L23\",null,{\"children\":\"$L24\"}],null],[\"$\",\"$L25\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$26\",null,{\"fallback\":null,\"children\":\"$L27\"}]}]}]]}]\n"])</script>
1<script>self.__next_f.push([1,"24:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n20:null\n"])</script>
1<script>self.__next_f.push([1,"28:I[622,[],\"IconMark\"]\n22:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Projects - Edward Thomson\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"libgit2, Test Summary Action, git-recover, and more software projects by Edward Thomson\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/icon.png?fb3cb5d58eaf76a3\",\"type\":\"image/png\",\"sizes\":\"256x256\"}],[\"$\",\"$L28\",\"4\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script>
1<script>self.__next_f.push([1,"27:\"$22:metadata\"\n"])</script>
1</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.