Mercurial > hg > Papers > 2009 > pin-gn
comparison merger.tex @ 2:4742b1e4da3a default tip
modify merge,
and remove eclipse, debug
author | one |
---|---|
date | Thu, 19 Feb 2009 01:26:01 +0900 |
parents | 39af8ab46cbb |
children |
comparison
equal
deleted
inserted
replaced
1:78a12584e841 | 2:4742b1e4da3a |
---|---|
33 それぞれのエディタに蓄積されたREPコマンド列は順番が異なる。図\ref{fig:new_merge}を例に見ると、Editor1ではeid=1,3,2の順に蓄積されているが、Editor2ではeid=2,1,3の順番である。 | 33 それぞれのエディタに蓄積されたREPコマンド列は順番が異なる。図\ref{fig:new_merge}を例に見ると、Editor1ではeid=1,3,2の順に蓄積されているが、Editor2ではeid=2,1,3の順番である。 |
34 これをソートして順番を一致させてエディタへ反映すれば編集結果を一致させることができる。 | 34 これをソートして順番を一致させてエディタへ反映すれば編集結果を一致させることができる。 |
35 しかしエディタには既に、それぞれのエディタ間で異なった順番でREPコマンドが反映されてしまっているので、エディタ側のテキストに対してUndoの処理を行う。 | 35 しかしエディタには既に、それぞれのエディタ間で異なった順番でREPコマンドが反映されてしまっているので、エディタ側のテキストに対してUndoの処理を行う。 |
36 これにより、それぞれのエディタは、編集前の状態に戻り、テキストは一致している状態である。 | 36 これにより、それぞれのエディタは、編集前の状態に戻り、テキストは一致している状態である。 |
37 その後、ソートされたREPコマンド列をテキストへ反映させ全てのテキストを一致させる。 | 37 その後、ソートされたREPコマンド列をテキストへ反映させ全てのテキストを一致させる。 |
38 このUndoの処理のために蓄積されたREPコマンド列からUndoコマンドを生成する。 | 38 |
39 Undoコマンドはエディタに蓄積されたREPコマンド列から生成する。 | |
40 まず、このコマンド列を逆順にし、次に、insertコマンドはdeleteコマンドに、deleteコマンドはinsertコマンドに変換する(図\ref{fig:undo_command})。 | |
41 この生成されたUndoコマンド列をテキストに反映させることでテキストの状態を編集前の状態に戻す。 | |
42 | |
43 \begin{figure}[htpb] | |
44 \begin{center} | |
45 \includegraphics[scale=.3]{figure/undo_command.pdf} | |
46 \end{center} | |
47 \caption{Undoコマンドの生成} | |
48 \label{fig:undo_command} | |
49 \end{figure} | |
50 | |
51 | |
52 次に、行番号とエディタ番号によってREPコマンド列をソートする。これによってそれぞれのエディタ間でのコマンド列の順序が一致する(図\ref{fig:sort_command})。 | |
53 \begin{figure}[htpb] | |
54 \begin{center} | |
55 \includegraphics[scale=.3]{figure/sort_command.pdf} | |
56 \end{center} | |
57 \caption{コマンド列のソート} | |
58 \label{fig:sort_command} | |
59 \end{figure} | |
60 | |
61 この、Undoコマンド列とソートコマンド列をそれぞれのエディタに反映することにより、テキストを一致させる。 | |
62 | |
63 マージを開始するタイミングは、エディタ自身が発行したREPコマンドがSession Ringを巡回して戻ってきたときである。 | |
64 テキストへと編集が起こらずにコマンドを発行しなかった場合は、他のエディタから発行されるinsert\_ack、delete\_ackッコマンドを受け取った時にマージを開始する。 | |
39 | 65 |
40 | 66 |
41 \subsection{マージ処理のSession Managerへの移行} | 67 \subsection{マージ処理のSession Managerへの移行} |
42 マージの処理はこれまで、エディタ側で実装されていたが、マージはREP共通の処理であるため、それぞれのテキストエディタへ個別に実装するよりは、Session Managerへ実装する方が望ましいと考えた。 | 68 マージの処理はこれまで、エディタ側で実装されていたが、マージはREP共通の処理であるため、それぞれのテキストエディタへ個別に実装するよりは、Session Managerへ実装する方が望ましいと考えた。 |
43 しかし、エディタとSession Managerとの間では非同期に通信を行っているため、マージコマンドとエディタコマンドとの間で衝突が起こってしまうことがある。マージ中にエディタからの割り込みがあった場合である。 | 69 しかし、エディタとSession Managerとの間では非同期に通信を行っているため、マージコマンドとエディタコマンドとの間で衝突が起こってしまうことがある(図\ref{fig:remerge})。マージ中にエディタからの割り込みがあった場合である。 |
44 これを解決するため、マージコマンドとエディタコマンドとの間マージを行うリマージコマンドの生成を提案した(図\ref{fig:remerge})。 | 70 これを解決するため、マージコマンドとエディタコマンドとの間マージを行うリマージコマンドの生成を提案した。%(図\ref{fig:remerge})。 |
45 | |
46 リマージコマンドもマージコマンドと同様にUndoを行うが、コマンドのソートは行わずに、エディタからの割り込みのみを排除して、もう一度同様のマージコマンド列をテキストへ反映させる。 | |
47 その後、排除したエディタ割り込みコマンドをテキストへ反映させる。 | |
48 | 71 |
49 \begin{figure}[htpb] | 72 \begin{figure}[htpb] |
50 \begin{center} | 73 \begin{center} |
51 \includegraphics[scale=.3]{figure/remerge.pdf} | 74 \includegraphics[scale=.3]{figure/remerge.pdf} |
52 \end{center} | 75 \end{center} |
53 \caption{リマージ} | 76 \caption{リマージ} |
54 \label{fig:remerge} | 77 \label{fig:remerge} |
55 \end{figure} | 78 \end{figure} |
79 | |
80 %リマージコマンドもマージコマンドと同様にUndoを行うが、コマンドのソートは行わずに、エディタからの割り込みのみを排除して、もう一度同様のマージコマンド列をテキストへ反映させる。 | |
81 %その後、排除したエディタ割り込みコマンドをテキストへ反映させる。 | |
82 | |
83 まず、コマンドの割り込みがあったかどうかをチェックするために、マージャが受け取ったこまんどを確認する(表\ref{tab:received_command})。 | |
84 この表では、マージコマンドをcomman1からcommand4とし、エディタからの割り込みコマンドをuser\_commandとしている。 | |
85 | |
86 \begin{table}[htdp] | |
87 \caption{received command} | |
88 \begin{center} | |
89 \begin{tabular}{|c|c|} | |
90 \hline | |
91 1 & command1 \\ | |
92 \hline | |
93 2 & command2 \\ | |
94 \hline | |
95 3 & user\_command \\ | |
96 \hline | |
97 4 & command3 \\ | |
98 \hline | |
99 5 & command4 \\ | |
100 \hline | |
101 \end{tabular} | |
102 \end{center} | |
103 \label{tab:received_command} | |
104 \end{table} | |
105 | |
106 これにより、3番目に割り込みがあったことがわかるので、5、4、3番目をUndoする。そして、command3、command4、をもう一度redoして最後にuser\_commandを反映する。 | |
107 | |
108 \begin{table}[htdp] | |
109 \caption{remerge command} | |
110 \begin{center} | |
111 \begin{tabular}{|c|c|} | |
112 \hline | |
113 1 & undo(command4) \\ | |
114 \hline | |
115 2 & undo(command3) \\ | |
116 \hline | |
117 3 & undo(user\_command) \\ | |
118 \hline | |
119 4 & command3 \\ | |
120 \hline | |
121 5 & command4 \\ | |
122 \hline | |
123 6 & user\_command \\ | |
124 \hline | |
125 \end{tabular} | |
126 \end{center} | |
127 \label{tab:remerge_command} | |
128 \end{table} |