chiark / gitweb /
1 \section{Pseudo-merge}
3 Given $L$ and some other commits $\set R$, generate a
4 `fake merge': i.e., a commit which is a descendant of $L$ and $\set R$
5 but whose contents are exactly those of $L$.
7 \gathbegin
8  C \hasparents \{ L \} \cup \set R
9 \gathnext
10  \patchof{C} = \patchof{L}
11 \gathnext
12  D \isin C \equiv D \isin L \lor D = C
13 \end{gather}
15 \subsection{Conditions}
17 $\eqn{ Base Only }{ 18 L \in \pn 19 }$
21 $\eqn{ Ingredients }{ 22 \bigforall_{R \in \set R} 23 R \in \pn 24 \lor 25 R \in \foreign 26 \lor 27 R \in \pqy 28 }$
30 $\eqn{ Unique Tips }{ 31 C \haspatch \p \implies 32 \bigexists_T 33 \pendsof{C}{\py} = \{ T \} 34 }$
36 $\eqn{ Foreign Unaffected }{ 37 \pendsof{C}{\foreign} = \pendsof{L}{\foreign} 38 }$
40 \subsection{Lemma: Foreign Identical}
42 $\isforeign{D} \implies \big[ D \le C \equiv D \le L \big]$.
44 \proof{
45 Trivial by Foreign Unaffected and the definition of $\pends$
46 }
48 \subsection{No Replay}
50 Ingredients Prevent Replay applies:
51 $A = L$ always satisfies the $\exists$.  $\qed$
53 \subsection{Unique Base}
55 Not applicable, by Base Only.
57 \subsection{Tip Contents}
59 Not applicable, by Base Only.
61 \subsection{Base Acyclic}
63 Relevant only if $L \in \pn$.  For $D = C$, $D \in \pn$; OK.
64 For $D \neq C$, OK by Base Acyclic for $L$. $\qed$
66 \subsection{Coherence and Patch Inclusion}
68 $$69 \begin{cases} 70 L \haspatch \p : & C \haspatch \p \\ 71 L \nothaspatch \p : & C \nothaspatch \p 72 \end{cases} 73$$
75 \proof{
76 Consider some $D \in \py$.  $D \neq C$ by Base Only.
77 So $C \has \p \equiv L \has \p$.
78 }
80 \subsection{Unique Tips}
82 Explicitly dealt with by our Unique Tips condition.
84 \subsection{Foreign Inclusion}
86 True by Foreign Identical, and Foreign Inclusion of $L$.
88 \subsection{Foreign Contents}
90 Not applicable.
92 \subsection{Bases' Children}
94 We need to consider this for $D=L$ and also for $D=R$ ($R \in \set 95 R$).
97 For $D=L$, if $L \in \pn$ then $C \in \pn$, OK; whereas if
98 $L \not \in \pn$ Bases' Children is inapplicable.
100 For $D=R$,
101 xxx up to here?
103 If $L \in \py, R \in \py$: not applicable for either $D=L$ or $D=R$.
105 If $L \in \py, R \in \pn$: not applicable for $L$, OK for $R$.
107 Other possibilities for $L \in \py$ are excluded by Tip Merge.
109 If $L \in \pn, R \in \pn$: satisfied for both $L$ and $R$.
111 If $L \in \pn, R \in \foreign$: satisfied for $L$, not applicable for
112 $R$.
114 If $L \in \pn, R \in \pqy$: satisfied for $L$, not applicable for
115 $R$.
117 Other possibilities for $L \in \pn$ are excluded by Base Merge.
119 If $L \in \foreign$: not applicable for $L$; nor for $R$, by Foreign Merges.