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

Re: [PATCH 6/6] Add git-rewrite-commits

From
SVSven Verdoolaege <skimo@kotnet.org>
Date
Jul 16, 2007, 20:04 UTC
Message-ID
<20070716200404.GT999MdfPADPa@greensroom.kotnet.org>
In-Reply-To
<Pine.LNX.4.64.0707160054340.14781@racer.site>
On Mon, Jul 16, 2007 at 01:38:11AM +0100, Johannes Schindelin wrote:
> Didn't I mention that it was a severe limitation to think of the sha1 
> mapping of a 1-to-1 mapping?  Think of it more as a relation.

The mapping is used in several operations. First, there are several things that can happen to a commit

- it's pruned.  This includes, for me, path pruning, matching
  and a commit filter returning no SHA1s.
- it's rewritten to another commit that can be considered the
  "moral equivalent" of that commit.  This occurs when a commit
  is not pruned, but something else happened to the commit itself or
  one of its ancestors.  This excludes, for me, the case
  where a commit filter returns more than one SHA1.
- it's replaced by more than one SHA1.  This can only happen
  in a commit filter.
There are at least four operations in which this mapping is used:
- if the parents of a commit have been rewritten to one or more
  commits, then they are replaced by the new commits.
  If any parent has been pruned, then it is replaced by
  the result of applying this operation on _its_ parents.
- any reference (in refs/) that points to a rewritten or pruned
  commit is removed and
    * if the commit was rewritten to a single commit, then it is
      replaced by this commit
    * otherwise, there is no moral equivalent single commit, but
      we want to ensure we can still access the new commits, so
      I create several references, either to each of the many
      commits the old commit was rewritten to, or to each of
      its nearest unpruned ancestors (i.e., the same set as
      described in the previous operation).
- a SHA1 of a commit that appears in a commit message is replaced
  by the rewritten commit iff it was rewritten to a single commit.
  That is, if the commit was pruned or rewritten (through a commit
  filter to more than one commit), then the SHA1 is left alone.
- the mapping available to filters
    * if the commit was pruned, an empty file is created
    * otherwise a file is created containing all rewritten SHA1s

I understand you want the second operation to only apply to refs explicitly mentioned on the command line. What else would you like to change?

skimo
Previous: Sven VerdoolaegeNext: Sven Verdoolaege
Message 19 of 23 in “Add git-rewrite-commits v2”
  1. 0/6 Add git-rewrite-commits v2skimo@liacs.nl, Jul 12, 2007
  2. 1/6 revision: allow selection of commits that do not match a patternskimo@liacs.nl, Jul 12, 2007
  3. 2/6 export get_short_sha1skimo@liacs.nl, Jul 12, 2007
  4. 3/6 Define ishex(x) in git-compat-util.hskimo@liacs.nl, Jul 12, 2007
  5. Johannes SchindelinJul 14, 2007
  6. 4/6 refs.c: lock cached_refs during for_each_refskimo@liacs.nl, Jul 12, 2007
  7. 5/6 revision: mark commits that didn't match a pattern for later useskimo@liacs.nl, Jul 12, 2007
  8. 6/6 Add git-rewrite-commitsskimo@liacs.nl, Jul 12, 2007
  9. Sven VerdoolaegeJul 13, 2007
  10. Johannes SchindelinJul 14, 2007
  11. Junio C HamanoJul 14, 2007
  12. Sven VerdoolaegeJul 15, 2007
  13. Sven VerdoolaegeJul 14, 2007
  14. Sven VerdoolaegeJul 15, 2007
  15. Johannes SchindelinJul 16, 2007
  16. Sven VerdoolaegeJul 16, 2007
  17. Johannes SchindelinJul 18, 2007
  18. Sven VerdoolaegeJul 18, 2007
  19. Sven VerdoolaegeJul 16, 2007
  20. Sven VerdoolaegeJul 16, 2007
  21. Johannes SchindelinJul 18, 2007
  22. Johannes SchindelinJul 18, 2007
  23. Sven VerdoolaegeJul 19, 2007

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.