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

[PATCH 00/12] The first version of line level log browser

From
Bo Yang <struggleyb.nku@gmail.com>
Date
Jun 26, 2010, 13:27 UTC
Message-ID
<1277558857-23103-1-git-send-email-struggleyb.nku@gmail.com>

In this version, we support multiple ranges from multiple files. Anybody interested at it can try it with something like: git log -L /assign_range_to_parent/,/^}/ line.c or git log -L diff-range /assign_range_to_parent/,/^}/ line.c to get a more detail history of how the lines evolved into such a state after fixing several bugs, or git log diff-range -L /assign_range_to_parent/,/^}/ -L /cleanup/,/^}/ line.c to see when cleanup() function come into sceen.

We use a line number calculating method to find out the pre-image line range from the post-image line range. The algorithm is all in the map_lines function and I think the function is self-documenting. :)
For merge commit, we pass the line range to all of its parents and let these ranges change along each branch and combine again later when we encounter the splitting commit. This is because, if we keep the range non-split, we can give more context to users and make the output more meaningful.  So I chagne the original idea that to split the ranges at a merge commit. :)
I have also test some run on the Linux kernel source code. The tool is a little slow in the kernel repository, but it always give the correct history. :)
Feel free to post any criticism/advice to me!
Bo Yang (12):
  parse-options: stop when encounter a non-option
  parse-options: add two helper functions
  add the basic data structure for line level history
  parse the -L options
  export three functions from diff.c
  add range clone functions
  map/take range to parent
  print the line log
  map/print ranges along traversing the history topologically
  add --always-print option
  add two test cases
  some document update
 Documentation/git-log.txt          |   30 +
 Makefile                           |    2 +
 builtin/log.c                      |  130 ++++-
 diff.c                             |    6 +-
 diff.h                             |   18 +
 diffcore.h                         |    3 +
 line.c                             | 1244 ++++++++++++++++++++++++++++++++++++
 line.h                             |  128 ++++
 parse-options.c                    |   24 +-
 parse-options.h                    |    7 +-
 revision.c                         |   13 +-
 revision.h                         |   13 +-
 t/t4301-log-line-single-history.sh |  342 ++++++++++
 t/t4302-log-line-merge-history.sh  |  118 ++++
 14 files changed, 2066 insertions(+), 12 deletions(-)
 create mode 100644 line.c
 create mode 100644 line.h
 create mode 100755 t/t4301-log-line-single-history.sh
 create mode 100755 t/t4302-log-line-merge-history.sh
-- 
1.7.1.577.g36cf0.dirty
Next: Bo Yang
Message 1 of 19 in “The first version of line level log browser”
  1. 00/12 The first version of line level log browserBo Yang, Jun 26, 2010
  2. 01/12 parse-options: stop when encounter a non-optionBo Yang, Jun 26, 2010
  3. 02/12 parse-options: add two helper functionsBo Yang, Jun 26, 2010
  4. Junio C HamanoJun 27, 2010
  5. Bo YangJun 30, 2010
  6. 03/12 add the basic data structure for line level historyBo Yang, Jun 26, 2010
  7. Junio C HamanoJun 27, 2010
  8. Bo YangJun 30, 2010
  9. 04/12 parse the -L optionsBo Yang, Jun 26, 2010
  10. 05/12 export three functions from diff.cBo Yang, Jun 26, 2010
  11. 06/12 add range clone functionsBo Yang, Jun 26, 2010
  12. Junio C HamanoJun 27, 2010
  13. 07/12 map/take range to parentBo Yang, Jun 26, 2010
  14. 08/12 print the line logBo Yang, Jun 26, 2010
  15. Ramkumar RamachandraJun 27, 2010
  16. 09/12 map/print ranges along traversing the history topologicallyBo Yang, Jun 26, 2010
  17. 10/12 add --always-print optionBo Yang, Jun 26, 2010
  18. 11/12 add two test casesBo Yang, Jun 26, 2010
  19. 12/12 some document updateBo Yang, Jun 26, 2010

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.