~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/textmerge.py

  • Committer: John Arbash Meinel
  • Date: 2007-03-01 21:56:19 UTC
  • mto: (2255.7.84 dirstate)
  • mto: This revision was merged to the branch mainline in revision 2322.
  • Revision ID: john@arbash-meinel.com-20070301215619-wpt6kz8yem3ypu1b
Update to dirstate locking.
Move all of WT4.lock_* functions locally, so that they can
properly interact and cleanup around when we lock/unlock the
dirstate file.
Change all Lock objects to be non-blocking. So that if someone
grabs a lock on the DirState we find out immediately, rather
than blocking.
Change WT4.unlock() so that if the dirstate is dirty, it will
save the contents even if it only has a read lock.
It does this by trying to take a write lock, if it fails
we just ignore it. If it succeeds, then we can flush to disk.
This is more important now that DirState tracks file changes.
It allows 'bzr status' to update the cached stat and sha values.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
#
17
 
# Author: Martin Pool <mbp@canonical.com>
 
17
# Author: Martin Pool <mbp@canonical.com> 
18
18
#         Aaron Bentley <aaron.bentley@utoronto.ca>
19
19
 
20
20
 
29
29
    This is an iterable of tuples of lists of lines.
30
30
    Each tuple may have a length of 1 - 3, depending on whether the region it
31
31
    represents is conflicted.
32
 
 
 
32
    
33
33
    Unconflicted region tuples have length 1.
34
34
    Conflicted region tuples have length 2 or 3.  Index 1 is text_a, e.g. THIS.
35
35
    Index 1 is text_b, e.g. OTHER.  Index 2 is optional.  If present, it
60
60
                    yield line
61
61
            else:
62
62
                yield self.a_marker
63
 
                for line in lines[0]:
 
63
                for line in lines[0]: 
64
64
                    yield line
65
65
                yield self.split_marker
66
 
                for line in lines[1]:
 
66
                for line in lines[1]: 
67
67
                    yield line
68
68
                yield self.b_marker
69
69
 
120
120
    regions produce conflicts.
121
121
    """
122
122
 
123
 
    def __init__(self, lines_a, lines_b, a_marker=TextMerge.A_MARKER,
124
 
                 b_marker=TextMerge.B_MARKER,
 
123
    def __init__(self, lines_a, lines_b, a_marker=TextMerge.A_MARKER, 
 
124
                 b_marker=TextMerge.B_MARKER, 
125
125
                 split_marker=TextMerge.SPLIT_MARKER):
126
126
        TextMerge.__init__(self, a_marker, b_marker, split_marker)
127
127
        self.lines_a = lines_a
128
128
        self.lines_b = lines_b
129
129
 
130
130
    def _merge_struct(self):
131
 
        """Return structured merge info.
 
131
        """Return structured merge info.  
132
132
        See TextMerge docstring.
133
133
        """
134
134
        sm = bzrlib.patiencediff.PatienceSequenceMatcher(None, self.lines_a, self.lines_b)
139
139
            yield(self.lines_a[pos_a:ai], self.lines_b[pos_b:bi])
140
140
            # matching lines
141
141
            yield(self.lines_a[ai:ai+l],)
142
 
            pos_a = ai + l
 
142
            pos_a = ai + l 
143
143
            pos_b = bi + l
144
144
        # final non-matching lines
145
145
        yield(self.lines_a[pos_a:-1], self.lines_b[pos_b:-1])