{"id":14566,"date":"2020-09-18T16:12:58","date_gmt":"2020-09-18T14:12:58","guid":{"rendered":"https:\/\/daniel.haxx.se\/blog\/?p=14566"},"modified":"2020-09-18T16:16:59","modified_gmt":"2020-09-18T14:16:59","slug":"my-first-15000-curl-commits","status":"publish","type":"post","link":"https:\/\/daniel.haxx.se\/blog\/2020\/09\/18\/my-first-15000-curl-commits\/","title":{"rendered":"My first 15,000 curl commits"},"content":{"rendered":"\n<p>I&#8217;ve long maintained that <strong>persistence<\/strong> is one of the main qualities you need in order to succeed with your (software) project. In order to manage to ship a product that truly conquers the world. By continuously and never-ending keeping at it: polishing away flaws and adding good features. On and on and on.<\/p>\n\n\n\n<p>Today marks the day when I landed my 15,000th commit in the <a href=\"https:\/\/github.com\/curl\/curl\">master branch in curl&#8217;s git repository<\/a> &#8211; and we don&#8217;t do merge commits so this number doesn&#8217;t include such. Funnily enough, <a href=\"https:\/\/github.com\/curl\/curl\/graphs\/contributors\">GitHub can&#8217;t count<\/a> and shows a marginally lower number.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"844\" height=\"116\" src=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/15000-commits.png\" alt=\"\" class=\"wp-image-14645\" srcset=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/15000-commits.png 844w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/15000-commits-450x62.png 450w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/15000-commits-200x27.png 200w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/15000-commits-768x106.png 768w\" sizes=\"auto, (max-width: 844px) 100vw, 844px\" \/><\/figure>\n\n\n\n<p>This is of course a totally meaningless number and I&#8217;m only mentioning it here because it&#8217;s even and an opportunity for me to celebrate something. To cross off an imaginary milestone. This is not even a year since we passed <a href=\"https:\/\/daniel.haxx.se\/blog\/2019\/11\/29\/curl-25000-commits\/\" data-type=\"post\" data-id=\"12859\">25,000 total number of commits<\/a>. Another meaningless number.<\/p>\n\n\n\n<p>15,000 commits equals 57% of all commits done in curl so far and it makes me the only committer in the curl project with over 10% of the commits.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/curl.haxx.se\/dashboard1.html#daniel-vs-rest\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"675\" src=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard1-1200x675.png\" alt=\"\" class=\"wp-image-14694\" srcset=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard1-1200x675.png 1200w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard1-450x253.png 450w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard1-200x113.png 200w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard1-768x432.png 768w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard1-1536x864.png 1536w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard1-2048x1152.png 2048w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n\n\n\n<p>The curl git history starts on December 29 1999, so the first 19 months of commits from the early curl history are lost. 15,000 commits over this period equals a little less than 2 commits per day on average. I reached 10,000 commits  in December 2011, so the latest 5,000 commits were done at a slower pace than the first 10,000.<\/p>\n\n\n\n<p>I estimate that I&#8217;ve spent more than 15,000 hours working on curl over this period, so it would mean that I spend more than one hour of &#8220;curl time&#8221; per commit on average. According to <a href=\"https:\/\/curl.haxx.se\/gitstats\/authors.html\">gitstats<\/a>, these 15,000 commits were done on 4,271 different days.<\/p>\n\n\n\n<p>We also have other curl repositories that aren&#8217;t included in this commit number. For example, I have done over 4,400 commits in curl&#8217;s website repository.<\/p>\n\n\n\n<p>With these my first 15,000 commits I&#8217;ve added 627,000 lines and removed 425,000, making an average commit adding 42 and removing 28 lines. (Feels pretty big but I figure the really large ones skew the average.)<\/p>\n\n\n\n<p>The largest time gap ever between two of my commits in the curl tree is almost 35 days back in June 2000. If we limit the check to &#8220;modern times&#8221;, as in 2010 or later, there was a 19 day gap in July 2015. I <em>do<\/em> take vacations, but I usually keep up with the most important curl development even during those.<\/p>\n\n\n\n<p>On average it is one commit done by me every 12.1 hours. Every 15.9 hours since 2010. <\/p>\n\n\n\n<p>I&#8217;ve been working <a href=\"https:\/\/daniel.haxx.se\/blog\/2019\/02\/02\/im-on-team-wolfssl\/\" data-type=\"post\" data-id=\"11915\">full time on curl since early 2019<\/a>, up until then it was a spare time project only for me. Development with pull-requests and CI and things that verify a lot of the work <em>before<\/em> merge is a recent thing so one explanation for a slightly higher commit frequency in the past is that we then needed more &#8220;oops&#8221; commits to rectify mistakes. These days, most of them are done in the PR branches that are squashed when subsequently merged into master. Fewer commits with higher quality.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">curl committers<\/h2>\n\n\n\n<p>We have merged commits authored by over 833 authors into the curl master repository.  Out of these, 537 landed only a single commit (so far).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/curl.haxx.se\/dashboard1.html#authors\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"675\" src=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard2-1200x675.png\" alt=\"\" class=\"wp-image-14695\" srcset=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard2-1200x675.png 1200w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard2-450x253.png 450w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard2-200x113.png 200w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard2-768x432.png 768w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard2-1536x864.png 1536w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard2-2048x1152.png 2048w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n\n\n\n<p>We are 48 authors who ever wrote 10 or more commits within the same year. 20 of us committed that amount of commits during more than one year.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/curl.haxx.se\/dashboard1.html#coreteam-per-year\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"675\" src=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard3-1200x675.png\" alt=\"\" class=\"wp-image-14696\" srcset=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard3-1200x675.png 1200w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard3-450x253.png 450w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard3-200x113.png 200w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard3-768x432.png 768w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard3-1536x864.png 1536w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-curl-Project-status-dashboard3-2048x1152.png 2048w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n\n\n\n<p>We are 9 authors who wrote more than 1% of the commits each.<\/p>\n\n\n\n<p>We are 5 authors who ever wrote 10 or more commits within the same year in 10 or more years.<\/p>\n\n\n\n<p>Our second-most committer (by commit count) has not merged a commit for over seven years.<\/p>\n\n\n\n<p>To reach curl&#8217;s top-100 committers list right now, you only need to land 6 commits.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">can I keep it up?<\/h2>\n\n\n\n<p>I intend to stick around in the curl project going forward as well. If things just are this great and life remains fine, I hope that I will be maintaining roughly this commit speed for years to come. My prediction is therefore that it will take longer than another twenty years to reach 30,000 commits.<\/p>\n\n\n\n<p>I&#8217;ve worked on curl and its precursors for almost <em>twenty-four years<\/em>. In another twenty-four years I will be well into my retirement years. At some point I will probably not be fit to shoulder this job anymore!<\/p>\n\n\n\n<p>I have never planned long ahead before and I won&#8217;t start now. I will instead keep focused on keeping curl top quality, an exemplary open source project and a welcoming environment for newcomers and oldies alike. I will continue to make sure the project is able to function totally independently if I&#8217;m present or not.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The 15,000th commit?<\/h2>\n\n\n\n<p>So what exactly did I change in the project when I merged my 15,000th ever change into the branch?<\/p>\n\n\n\n<p>It was a pretty boring and <a href=\"https:\/\/github.com\/curl\/curl\/commit\/559ed3ca2545c56a9acc4e805970434f657bd691\">non-spectacular one<\/a>. I removed a document (<code>RESOURCES<\/code>) from the docs\/ folder as that has been a bit forgotten and now is just completely outdated. There&#8217;s a much better page for this provided on the web site: <a href=\"https:\/\/curl.haxx.se\/rfc\/\">https:\/\/curl.haxx.se\/rfc\/<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Celebrations!<\/h2>\n\n\n\n<p>I of coursed asked my twitter friends a few days ago on how this occasion is best celebrated:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/twitter.com\/bagder\/status\/1302345161272418307\"><img loading=\"lazy\" decoding=\"async\" width=\"825\" height=\"493\" src=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-Twitter-Publish.png\" alt=\"\" class=\"wp-image-14691\" srcset=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-Twitter-Publish.png 825w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-Twitter-Publish-450x269.png 450w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-Twitter-Publish-200x120.png 200w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2020\/09\/Screenshot_2020-09-15-Twitter-Publish-768x459.png 768w\" sizes=\"auto, (max-width: 825px) 100vw, 825px\" \/><\/a><\/figure>\n\n\n\n<p>I showed these results to my wife. She approved.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve long maintained that persistence is one of the main qualities you need in order to succeed with your (software) project. In order to manage to ship a product that truly conquers the world. By continuously and never-ending keeping at it: polishing away flaws and adding good features. On and on and on. Today marks &hellip; <a href=\"https:\/\/daniel.haxx.se\/blog\/2020\/09\/18\/my-first-15000-curl-commits\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">My first 15,000 curl commits<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":5,"featured_media":10629,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-14566","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-curl"],"_links":{"self":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/14566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/comments?post=14566"}],"version-history":[{"count":61,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/14566\/revisions"}],"predecessor-version":[{"id":14722,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/14566\/revisions\/14722"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/media\/10629"}],"wp:attachment":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/media?parent=14566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/categories?post=14566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/tags?post=14566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}