git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Statictics on Git.pm usage in git commands (was: [PATCH 2/3] add new Git::Repo API)

From
Jakub Narebski <jnareb@gmail.com>
Date
Jul 19, 2008, 20:54 UTC
Message-ID
<200807192254.24622.jnareb@gmail.com>
In-Reply-To
<20080718164828.GT10151@machine.or.cz>
On Fri, 18 July 2008, Petr Baudis wrote:
> But the experience shows that the pipe interface is actually
> the _most_ used part of the Git Perl API.

This made me curious which parts of Git.pm, the current Git Perl API, are used most.

Here is some statistics on the usage of Git Perl API among built-in and contrib commands.

>From git commands in Perl the following include "use Git" in their 

sources: git-cvsexportcommit, git-send-email, git-svn, and helper script git-add--interactive. There are Perl scripts which do not use Git.pm: git-archimport (which I think should be obsoleted or moved to contrib), git-cvsimport, git-cvsserver, git-relink. This means that half of Perl scripts use Git Perl API.

The situation is worse for scripts in 'contrib/'. From those, only contrib/examples/git-remote.perl uses Git.pm; neither blameview, continuous, git-import and import-tars in fast-import, setgitperms and update-paranoid in hooks, stats, nor other Perl scripts in examples (git-rerere, git-svnimport) include "use Git".

Below there are stats on how different commands from Git.pm are used in mentioned Perl scripts:

1. git-add--interactive.perl uses Git.pm mainly to access color
   configuration: 2 ->get_colorbool, 8 ->get_color, 1 ->config.
   It also uses once ->repository() constuctor, and once
   ->repo_path().
   This means that future Git::Config _has_ to have support for
   color or colorbool valued configuration values.
2. git-cvsexportcommit.perl uses (besides ->repository() constructor)
   only once ->config; so I guess that current interface wrapping
   git-config should stay, because parsing whole config for such
   situation would be overkill.
   What is strange that git-cvsexportcommit.perl defines its own
   safe_pipe_capture and xargs_safe_pipe_capture (!), and uses
   them, open pipeline, backticks, and system() to call git commands.
   
3. git-send-email.perl uses 5 config, 2 config_bool, 2 ident_person
   (for author and for committer), 1 version, and of course once
   ->repository() constructor.  
   Here we can see how to work around current API to: it uses
   Git::config(@repo, "sendemail.identity") form, where 
   	my $repo = eval { Git->repository() };
   	my @repo = $repo ? ($repo) : ();
   to make it work both with git repository (using repo config), and
   outside/without git repository, using only user and system git
   config.
4. git-svn.perl (which is if I checked correctly third largest scripted
   git command, after gitk-gui/gitk-wish and gitweb/gitweb.perl) uses:
     3  x repository
     28 x command_oneline
     19 x command_noisy
     18 x command
     14 x command_output_pipe
     1  x command_input_pipe
     1  x git_try_cmd  (and many "eval { command()/command_oneline() }")
     2  x cat_blob
     1  x hash_and_insert_object
     1  x get_colorbool
   (The above are all if I have not made mistake when counting commands)
   Side note: git-svn is command which would get most out of
   Git::Config, as it currently uses combination of "git config -l"
   and "git config --get" (I guess that the code in question predates
   machine-parseable "git config -l -z").

Note that all those statictics doesn't count how many times some Git.pm method was called, only how many times it occurs in the code.

-- 
Jakub Narebski
Poland
Previous: Johannes SchindelinNext: Petr Baudis
Message 18 of 55 in “Git::Repo API and gitweb caching”
  1. 0/3 Git::Repo API and gitweb cachingLea Wiemann, Jul 11, 2008
  2. 1/3 gitweb: add test suite with Test::WWW::Mechanize::CGILea Wiemann, Jul 11, 2008
  3. 2/3 add new Git::Repo APILea Wiemann, Jul 11, 2008
  4. Junio C HamanoJul 13, 2008
  5. Lea WiemannJul 14, 2008
  6. Jakub NarebskiJul 13, 2008
  7. Lea WiemannJul 14, 2008
  8. Petr BaudisJul 14, 2008
  9. Lea WiemannJul 14, 2008
  10. Jakub NarebskiJul 14, 2008
  11. Lea WiemannJul 15, 2008
  12. Petr BaudisJul 18, 2008
  13. Jakub NarebskiJul 18, 2008
  14. Petr BaudisJul 18, 2008
  15. Lea WiemannJul 18, 2008
  16. Petr BaudisJul 18, 2008
  17. Johannes SchindelinJul 18, 2008
  18. Statictics on Git.pm usage in git commands (was: [PATCH 2/3] add new Git::Repo API)Jakub Narebski, Jul 19, 2008
  19. Petr BaudisJul 19, 2008
  20. Jakub NarebskiJul 20, 2008
  21. Petr BaudisJul 20, 2008
  22. Johannes SchindelinJul 20, 2008
  23. Petr BaudisJul 20, 2008
  24. Johannes SchindelinJul 20, 2008
  25. Petr BaudisJul 20, 2008
  26. Johannes SchindelinJul 20, 2008
  27. Petr BaudisJul 18, 2008
  28. Jakub NarebskiJul 19, 2008
  29. Jakub NarebskiJul 19, 2008
  30. Petr BaudisJul 20, 2008
  31. Jakub NarebskiJul 20, 2008
  32. Jakub NarebskiJul 16, 2008
  33. Lea WiemannJul 16, 2008
  34. Jakub NarebskiJul 17, 2008
  35. Lea WiemannJul 18, 2008
  36. Jakub NarebskiJul 18, 2008
  37. Lea WiemannJul 18, 2008
  38. 3/3 gitweb: use new Git::Repo API, and add optional cachingLea Wiemann, Jul 11, 2008
  39. Jakub NarebskiJul 14, 2008
  40. Lea WiemannJul 14, 2008
  41. Jakub NarebskiJul 14, 2008
  42. Lea WiemannJul 14, 2008
  43. Jakub NarebskiJul 15, 2008
  44. Lea WiemannJul 15, 2008
  45. Johannes SchindelinJul 15, 2008
  46. J.H.Jul 15, 2008
  47. Lea WiemannJul 15, 2008
  48. J.H.Jul 15, 2008
  49. Johannes SchindelinJul 11, 2008
  50. Jakub NarebskiJul 11, 2008
  51. Lea WiemannJul 11, 2008
  52. Abhijit Menon-SenJul 11, 2008
  53. Jakub NarebskiJul 12, 2008
  54. Lea WiemannJul 19, 2008
  55. Lea WiemannAug 18, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.