X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=NOTES.git-debrebase;h=31c0c1c53c168bb31ec2fe3bbad003feedb1937b;hb=d09d35de46974b3ece2c469f54d898daaa28edf5;hp=8613e407bce54654f5a3363ecd9bdef99217cea7;hpb=0294b9e9d45cb4360674ea90a39d630153a94aea;p=dgit.git diff --git a/NOTES.git-debrebase b/NOTES.git-debrebase index 8613e407..31c0c1c5 100644 --- a/NOTES.git-debrebase +++ b/NOTES.git-debrebase @@ -1,77 +1,14 @@ TODO reference docs - git-debrebase(5) data model git-debrebase(1) command line tutorial dgit-maint-debrebase(7) someone should set branch..mergeOptions to include --ff-only ? - clean up remains of NOTES and README + clean up remains of README arrange for dgit to automatically stitch on push -# git-ffqrebase start [BASE] -# # records previous HEAD so it can be overwritten -# # records base for future git-ffqrebase -# git-ffqrebase set-base BASE -# git-ffqrebase -# git-ffqrebase finish -# git-ffqrebase status [BRANCH] -# -# refs/ffq-prev/REF relates to refs/REF -# -# git-debrebase without start, if already started, is willing -# to strip pseudomerges provided that they overwrite exactly -# the previous HEAD -# xxxx is this right ? what matters is have we pushed -# I think in fact the right answer is: -# git-debrebase always strips out pseudomerges from its branch -# a pseudomerge is put in at the time we want to push -# at that time, we make a pseudomerge of the remote tracking -# branch (if raw git) or the dgit view (if dgit) -# for raw git git-ffqrebase, do want preciseley to record -# value of remote tracking branch or our branch, on start, so we -# overwrite only things we intend to -# the previous pseudomerge check for tags and remote branches ? - - -========= - -special commit tags -overall format - [git-debrebase[ COMMIT-TYPE [ ARGS...]]: PROSE, MORE PROSE] - -[git-debrebase: split mixed commit, debian part] -[git-debrebase: split mixed commit, upstream-part] -[git-debrebase: convert dgit import, debian changes] -[git-debrebase anchor: convert dgit import, upstream changes] - -[git-debrebase upstream-combine . PIECE[ PIECE...]: new upstream] -[git-debrebase anchor: new upstream NEW-UPSTREAM-VERSION, merge] -[git-debrebase: new upstream NEW-UPSTREAM-VERSION, changelog] - -[git-debrebase convert-from-gbp: drop patches] -[git-debrebase anchor: declare upstream] -[git-debrebase pseudomerge: stitch] - -[git-debrebase convert-to-gbp: commit patches] - -m{^\[git-debrebase (?:\w*-)?upstream combine \.((?: $extra_orig_namepart_re)+)\]} - -Every anchor commit must be a merge. In principle, this is not -necessary. After all, we are relying on the - [git-debrebase anchor: ...] -commit message annotation in "declare" anchor merges (which -do not have any upstream changes), to distinguish those anchor -merges from ordinary pseudomerges (which we might just try to strip). - -However, the user is going to be doing git-rebase a lot. We really -don't want them to rewrite an anchor commit. git-rebase -trips up on merges, so that is a useful safety catch. - - -========= - workflow git-debrebase blah [implies start] strips pseudomerge(s) @@ -79,23 +16,23 @@ workflow commit / git-debrebase / etc. dgit --damp-run push - hook: call git-debrebase prep-push adds new pm ? passes --overwrite ? - dgit push does not update remote + hook: call git-debrebase prep-push dgit push does not update remote + or something, must add patches at least - commit / git-debrebase / etc. strips pm(s) including last one + commit / git-debrebase / etc. strips patches dgit push - hook: call git-debrebase prep-push adds new pm ? passes --overwrite ? - dgit push DOES update remote + hook: call git-debrebase prep-push dgit push DOES update remote commit / git-debrebase / etc. strips last pm, but arranges that remade pm will incorporate it - -========== +======================================== Theory for ffq-prev + refs/ffq-prev/REF relates to refs/REF + When we strip a pm, we need to maybe record it (or something) as the new start point. @@ -145,7 +82,7 @@ When we do a thing We check we are ff from remotes before recording new ffq-prev -======================================== + ---------- now follows much the same info in different words ---------- 1. git-debrebase [-i etc.] @@ -179,6 +116,10 @@ N. git-debrebase [--noop-ok] record-ffq-prev we will teach dgit to do git-debrebase stitch + or some such ? + +following parts are not implemented and maybe aren't the +best subcommand names etc. 3. git-debrebase push @@ -190,45 +131,20 @@ N. git-debrebase [--noop-ok] record-ffq-prev stiches, finalises changelog, signs tags, pushes everything for the future, when there is some automatic builder -ffq-prev for each ref - refs/heads/FOO -is - refs/ffq-prev/FOO - ======================================== import from gbp -[ all this is done now: - inputs: - current HEAD (patches-unapplied), - this is going to be the base of the old breakwater - nominated upstream - - checks: - HEAD: = upstream: - upstream..HEAD: is empty (overrideable) - upstremm:debian is empty (overrideable) - - procedure: - construct - run gbp pq import to generate pq branch - new breakwater is - old HEAD - commit to remove d/patches - anchor merge with upstream - "rebase" of pq branch, each commit with d/patches stripped -] - what about dgit view branch ? ideally, would make pseudomerge over dgit view would need to check that dgit view is actually dgit view of ond of our ancestors failing that first push will need --overwrite +that is what is currently implemented ======================================== -divergence, merges: +how to handle divergence and merges (if not detected soon enough) same problem if merge, look at branches before merge @@ -265,3 +181,15 @@ current avaiable strategies: we have already constructed m (previous patch or merged breakwater) try using vector calculus in the implied cube and compute multiple ways to check consistency ? + +======================================== + +For downstreams of Debian, sketch of git-ffqrebase + +# git-ffqrebase start [BASE] +# # records previous HEAD so it can be overwritten +# # records base for future git-ffqrebase +# git-ffqrebase set-base BASE +# git-ffqrebase +# git-ffqrebase finish +# git-ffqrebase status [BRANCH]