From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: sxenos@google.com
Cc: git@vger.kernel.org, sbeller@google.com, jrn@google.com,
jch@google.com, jonathantanmy@google.com, stolee@gmail.com,
carl@ecbaldwin.net, dborowitz@google.com
Subject: Re: [PATCH] technical doc: add a design doc for the evolve command
Date: Thu, 15 Nov 2018 16:36:53 +0100 [thread overview]
Message-ID: <87r2fm1hey.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <20181115005546.212538-1-sxenos@google.com>
On Thu, Nov 15 2018, sxenos@google.com wrote:
> +Detailed design
> +===============
> +Obsolescence information is stored as a graph of meta-commits. A meta-commit is
> +a specially-formatted merge commit that describes how one commit was created
> +from others.
> +
> +Meta-commits look like this:
> +
> +$ git cat-file -p <example_meta_commit>
> +tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
> +parent aa7ce55545bf2c14bef48db91af1a74e2347539a
> +parent d64309ee51d0af12723b6cb027fc9f195b15a5e9
> +parent 7e1bbcd3a0fa854a7a9eac9bf1eea6465de98136
> +author Stefan Xenos <sxenos@gmail.com> 1540841596 -0700
> +committer Stefan Xenos <sxenos@gmail.com> 1540841596 -0700
> +parent-type content
> +parent-type obsolete
> +parent-type origin
> +
> +This says “commit aa7ce555 makes commit d64309ee obsolete. It was created by
> +cherry-picking commit 7e1bbcd3”.
> +
> +The tree for meta-commits is always the empty tree whose hash matches
> +4b825dc642cb6eb9a060e54bf8d69288fbee4904 exactly, but future versions of git may
> +attach other trees here. For forward-compatibility fsck should ignore such trees
> +if found on future repository versions. Similarly, current versions of git
> +should always fill in an empty commit comment and tools like fsck should ignore
> +the content of the commit comment if present in a future repository version.
> +This will allow future versions of git to add metadata to the meta-commit
> +comments or tree without breaking forwards compatibility.
> +
> +Parent-type
> +-----------
> +The “parent-type” field in the commit header identifies a commit as a
> +meta-commit and indicates the meaning for each of its parents. It is never
> +present for normal commits. It is a list of enum values whose order matches the
> +order of the parents. Possible parent types are:
> +
> +- content: the content parent identifies the commit that this meta-commit is
> + describing.
> +- obsolete: indicates that this parent is made obsolete by the content parent.
> +- origin: indicates that this parent was generated from the given commit.
> +
> +There must be exactly one content parent for each meta-commit and it is always
> +be the first parent. The content commit will always be a normal commit and not a
> +meta-commit. However, future versions of git may create meta-commits for other
> +meta-commits and the fsck tool must be aware of this for forwards compatibility.
> +
> +A meta-commit can have zero or more obsolete parents. An amend operation creates
> +a single obsolete parent. A merge used to resolve divergence (see divergence,
> +below) will create multiple obsolete parents. A meta-commit may have zero
> +obsolete parents if it describes a cherry-pick or squash merge that copies one
> +or more commits but does not replace them.
> +
> +A meta-commit can have zero or more origin parents. A cherry-pick creates a
> +single origin parent. Certain types of squash merge will create multiple origin
> +parents.
> +
> +An obsolete parent or origin parent may be either a normal commit (indicating
> +the oldest-known version of a change) or another meta-commit (for a change that
> +has already been modified one or more times).
I think it's worth pointing out for those that are rusty on commit
object details (but I checked) is that the reason for it not being:
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent aa7ce55545bf2c14bef48db91af1a74e2347539a
parent-type content
parent d64309ee51d0af12723b6cb027fc9f195b15a5e9
parent-type obsolete
parent 7e1bbcd3a0fa854a7a9eac9bf1eea6465de98136
parent-type origin
author Stefan Xenos <sxenos@gmail.com> 1540841596 -0700
committer Stefan Xenos <sxenos@gmail.com> 1540841596 -0700
Which would be easier to read, is that we're very sensitive to the order
of the first few fields (tree -> parent -> author -> committer) and fsck
will error out if we interjected a new field.
next prev parent reply other threads:[~2018-11-15 15:37 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-15 0:55 [PATCH] technical doc: add a design doc for the evolve command sxenos
2018-11-15 12:52 ` Johannes Schindelin
2018-11-17 20:30 ` Stefan Xenos
2018-11-19 15:55 ` SZEDER Gábor
2018-11-19 21:32 ` Stefan Xenos
2018-11-20 1:09 ` Jonathan Nieder
2018-11-15 15:36 ` Ævar Arnfjörð Bjarmason [this message]
2018-11-20 1:18 ` Jonathan Nieder
2018-11-20 9:43 ` Ævar Arnfjörð Bjarmason
2018-11-20 17:45 ` Stefan Xenos
2018-11-20 22:06 ` Jonathan Nieder
2018-11-20 23:45 ` Stefan Xenos
2018-11-21 1:33 ` Jonathan Nieder
2018-11-21 19:10 ` Stefan Xenos
2018-11-16 21:36 ` Derrick Stolee
2018-11-17 23:44 ` Stefan Xenos
2018-11-17 6:06 ` Duy Nguyen
2018-11-18 22:27 ` Stefan Xenos
2018-11-18 22:29 ` Stefan Xenos
2018-11-18 23:20 ` Junio C Hamano
2018-11-17 7:36 ` Junio C Hamano
2018-11-19 0:36 ` Stefan Xenos
2018-11-19 2:15 ` Junio C Hamano
2018-11-19 3:33 ` Stefan Xenos
2018-11-19 3:45 ` Junio C Hamano
2018-11-19 4:15 ` Junio C Hamano
2018-11-19 20:14 ` Stefan Xenos
2018-11-19 20:26 ` Jonathan Nieder
2018-11-20 1:03 ` Junio C Hamano
2018-11-20 17:27 ` Stefan Xenos
2018-11-20 12:18 ` Phillip Wood
2018-11-20 12:59 ` Phillip Wood
2018-11-20 20:19 ` Stefan Xenos
2019-01-15 11:16 ` Phillip Wood
2018-11-20 13:03 ` Phillip Wood
2018-11-20 20:24 ` Stefan Xenos
2018-11-21 12:14 ` Phillip Wood
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87r2fm1hey.fsf@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=carl@ecbaldwin.net \
--cc=dborowitz@google.com \
--cc=git@vger.kernel.org \
--cc=jch@google.com \
--cc=jonathantanmy@google.com \
--cc=jrn@google.com \
--cc=sbeller@google.com \
--cc=stolee@gmail.com \
--cc=sxenos@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.