summaryrefslogtreecommitdiff
path: root/README.git-debrebase
blob: 19ddbc05863d5fa3231b8494a6d3dbacce4a0dff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
So it would be possible to write a `git-debrebase' tool which would
take (for example) B4, above, and be able to perform functions like:

 * Strip pseudomerges: Rewrite the current branch so it contains no
   pseudomerges, turning ...B3 into ...@-A-1-2-B3.  (This should
   make a note, in your .git/ somewhere, of the original branch
   tip so that it can be overwritten with a pseudomerge.)

 * Cleanup branch: Reorganise the current branch so that the debian/
   changes come first, turning -@-A-1-2-B3 into ...@-A-B-1-2-3.

 * New upstream rebase: Start rebasing onto a new upstream version,
   turning ...#..@-A-B-1-2-3 into (...#..@-A-B-|...#'-)@'-1-2.  This
   would be a wrapper around git-rebase, which prepares @' and then
   tries to rebase 1 2 onto @'.  So if you ask for an interactive
   rebase @' doesn't appear in your commit list.

   Note that the construction of @' cannot fail because @' simply
   copies debian/ from B and and everything else from #'.  (Rebasing A
   and B is undesirable.  We want the debian/ files to be non-rebasing
   so we can `git log' and get the packaging history.)

 * Record pseudomerge.  This is like "committing" your patch queue.
   The LH parent is taken from the previously recorded tip.  (We could
   perhaps check that this is consistent with what we see in
   debian/changelog, but that is not a sufficient check so the
   recorded tip check is primary.)

Maybe some of these operations should automatically edit
debian/changelog.


Sean Whitton writes ("Re: Feedback on 3.0 source format problems"):
>  Does the [breakwater] branch contain debian/ alone?

No, it also contains a complete unmodified copy of the upstream code.
(Except that if upstream had a debian/ directory, it is completely
replaced.)

For `3.0 (quilt)' the breakwater branch contains roughly what you
would get if you untarred the origs and the debian.tar.gz, and then
deleted all the patches without applying them.


dgit import handling
--------------------

Consider a non-dgit NMU followed by a dgit NMU:



            interchange --/--B3!--%--/----D*-->
                         /          /
                        %          4
                       /          3
                      /          2
                     /          1
                    2*         &_
                   /          /| \
                  1          0 00 =XBC%
                 /
                /
       	  --@--A     breakwater
	   /
	--#--------> upstream


 Key:

    =XBC%     dgit tarball import of .debian.tar.gz containing
              Debian packaging including changes B C and patches

    0         dgit tarball import of upstream tarball
    00        dgit tarball import of supplementary upstream tarball
    &_        dgit nearly-breakwater import
    &'        git-debrebase converted import (upstream files only)
    D'        git-debrebase converted debian/ changes import

    * **      before and after HEAD

Want to transform this into:

 I. No new upstream version (0 + 00 eq #)

                        --/--B3!--%--/------D*-------------/-->
                         /          /	                  /
                        %          4	                 4**
                       /          3	                3
                      /          2 	               2
                     /          1  	              1
                    2*         &_  	             /
                   /          /| \ 	            /
                  1          0 00 =XBC%            /
                 /     	   	   	          /
                /      	   	       	         /
     	  --@--A-----B-----------------------C--D
     	   /
     	--#----------------------------------------->


 II. New upstream (0 + 00 neq #)

                        --/--B3!--%--/------D*-------------/-->
                         /          /	                  /
                        %          4	                 4**
                       /          3	                3
                      /          2 	               2
                     /          1  	              1
                    2*         &_  	             /
                   /          /| \ 	            /
                  1          0 00 =XBC%            /
                 /    	   	   	          /
                /     	   	       	         /
	  --@--A-----B--------------------@--C--D
	   /         	      	       	 /
	--#----------------------- - -  /  - - ----->
      	 		      	       /
				      &'
				     /|
				    0 00