Mercurial > hg
annotate mercurial/diffhelpers.c @ 6858:8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
The real reason for both issue is that bisect can not handle cases where there
are multiple possibilities for the result.
Example (from issue1228):
rev 0 -> good
rev 1 -> skipped
rev 2 -> skipped
rev 3 -> skipped
rev 4 -> bad
Note that this patch does not only fix the reported Assertion Error but also
the problem of a non converging bisect:
hg init
for i in `seq 3`; do echo $i > $i; hg add $i; hg ci -m$i; done
hg bisect -b 2
hg bisect -g 0
hg bisect -s
From this state on, you can:
a) mark as bad forever (non converging!)
b) mark as good to get an inconsistent state
c) skip for the Assertion Error
Minor description and code edits by pmezard.
author | Bernhard Leiner <bleiner@gmail.com> |
---|---|
date | Sat, 02 Aug 2008 22:10:10 +0200 |
parents | ec2cc1dadbf7 |
children | 900ccbd79ef7 |
rev | line source |
---|---|
4897
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
1 /* |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
2 * diffhelpers.c - helper routines for mpatch |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
3 * |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
4 * Copyright 2007 Chris Mason <chris.mason@oracle.com> |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
5 * |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
6 * This software may be used and distributed according to the terms |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
7 * of the GNU General Public License v2, incorporated herein by reference. |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
8 */ |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
9 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
10 #include <Python.h> |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
11 #include <stdlib.h> |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
12 #include <string.h> |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
13 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
14 static char diffhelpers_doc[] = "Efficient diff parsing"; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
15 static PyObject *diffhelpers_Error; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
16 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
17 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
18 /* fixup the last lines of a and b when the patch has no newline at eof */ |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
19 static void _fix_newline(PyObject *hunk, PyObject *a, PyObject *b) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
20 { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
21 int hunksz = PyList_Size(hunk); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
22 PyObject *s = PyList_GET_ITEM(hunk, hunksz-1); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
23 char *l = PyString_AS_STRING(s); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
24 int sz = PyString_GET_SIZE(s); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
25 int alen = PyList_Size(a); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
26 int blen = PyList_Size(b); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
27 char c = l[0]; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
28 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
29 PyObject *hline = PyString_FromStringAndSize(l, sz-1); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
30 if (c == ' ' || c == '+') { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
31 PyObject *rline = PyString_FromStringAndSize(l+1, sz-2); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
32 PyList_SetItem(b, blen-1, rline); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
33 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
34 if (c == ' ' || c == '-') { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
35 Py_INCREF(hline); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
36 PyList_SetItem(a, alen-1, hline); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
37 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
38 PyList_SetItem(hunk, hunksz-1, hline); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
39 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
40 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
41 /* python callable form of _fix_newline */ |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
42 static PyObject * |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
43 fix_newline(PyObject *self, PyObject *args) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
44 { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
45 PyObject *hunk, *a, *b; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
46 if (!PyArg_ParseTuple(args, "OOO", &hunk, &a, &b)) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
47 return NULL; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
48 _fix_newline(hunk, a, b); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
49 return Py_BuildValue("l", 0); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
50 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
51 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
52 /* |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
53 * read lines from fp into the hunk. The hunk is parsed into two arrays |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
54 * a and b. a gets the old state of the text, b gets the new state |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
55 * The control char from the hunk is saved when inserting into a, but not b |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
56 * (for performance while deleting files) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
57 */ |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
58 static PyObject * |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
59 addlines(PyObject *self, PyObject *args) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
60 { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
61 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
62 PyObject *fp, *hunk, *a, *b, *x; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
63 int i; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
64 int lena, lenb; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
65 int num; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
66 int todoa, todob; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
67 char *s, c; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
68 PyObject *l; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
69 if (!PyArg_ParseTuple(args, "OOiiOO", &fp, &hunk, &lena, &lenb, &a, &b)) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
70 return NULL; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
71 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
72 while(1) { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
73 todoa = lena - PyList_Size(a); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
74 todob = lenb - PyList_Size(b); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
75 num = todoa > todob ? todoa : todob; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
76 if (num == 0) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
77 break; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
78 for (i = 0 ; i < num ; i++) { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
79 x = PyFile_GetLine(fp, 0); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
80 s = PyString_AS_STRING(x); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
81 c = *s; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
82 if (strcmp(s, "\\ No newline at end of file\n") == 0) { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
83 _fix_newline(hunk, a, b); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
84 continue; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
85 } |
5483
ec2cc1dadbf7
Handle patches with misformatted empty lines
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4897
diff
changeset
|
86 if (c == '\n') { |
ec2cc1dadbf7
Handle patches with misformatted empty lines
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4897
diff
changeset
|
87 /* Some patches may be missing the control char |
ec2cc1dadbf7
Handle patches with misformatted empty lines
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4897
diff
changeset
|
88 * on empty lines. Supply a leading space. */ |
ec2cc1dadbf7
Handle patches with misformatted empty lines
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4897
diff
changeset
|
89 Py_DECREF(x); |
ec2cc1dadbf7
Handle patches with misformatted empty lines
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4897
diff
changeset
|
90 x = PyString_FromString(" \n"); |
ec2cc1dadbf7
Handle patches with misformatted empty lines
Hollis Blanchard <hollisb@us.ibm.com>
parents:
4897
diff
changeset
|
91 } |
4897
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
92 PyList_Append(hunk, x); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
93 if (c == '+') { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
94 l = PyString_FromString(s + 1); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
95 PyList_Append(b, l); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
96 Py_DECREF(l); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
97 } else if (c == '-') { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
98 PyList_Append(a, x); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
99 } else { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
100 l = PyString_FromString(s + 1); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
101 PyList_Append(b, l); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
102 Py_DECREF(l); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
103 PyList_Append(a, x); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
104 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
105 Py_DECREF(x); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
106 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
107 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
108 return Py_BuildValue("l", 0); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
109 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
110 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
111 /* |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
112 * compare the lines in a with the lines in b. a is assumed to have |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
113 * a control char at the start of each line, this char is ignored in the |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
114 * compare |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
115 */ |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
116 static PyObject * |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
117 testhunk(PyObject *self, PyObject *args) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
118 { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
119 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
120 PyObject *a, *b; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
121 long bstart; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
122 int alen, blen; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
123 int i; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
124 char *sa, *sb; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
125 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
126 if (!PyArg_ParseTuple(args, "OOl", &a, &b, &bstart)) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
127 return NULL; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
128 alen = PyList_Size(a); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
129 blen = PyList_Size(b); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
130 if (alen > blen - bstart) { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
131 return Py_BuildValue("l", -1); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
132 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
133 for (i = 0 ; i < alen ; i++) { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
134 sa = PyString_AS_STRING(PyList_GET_ITEM(a, i)); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
135 sb = PyString_AS_STRING(PyList_GET_ITEM(b, i + bstart)); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
136 if (strcmp(sa+1, sb) != 0) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
137 return Py_BuildValue("l", -1); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
138 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
139 return Py_BuildValue("l", 0); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
140 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
141 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
142 static PyMethodDef methods[] = { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
143 {"addlines", addlines, METH_VARARGS, "add lines to a hunk\n"}, |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
144 {"fix_newline", fix_newline, METH_VARARGS, "fixup newline counters\n"}, |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
145 {"testhunk", testhunk, METH_VARARGS, "test lines in a hunk\n"}, |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
146 {NULL, NULL} |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
147 }; |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
148 |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
149 PyMODINIT_FUNC |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
150 initdiffhelpers(void) |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
151 { |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
152 Py_InitModule3("diffhelpers", methods, diffhelpers_doc); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
153 diffhelpers_Error = PyErr_NewException("diffhelpers.diffhelpersError", |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
154 NULL, NULL); |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
155 } |
4574925db5c0
Add Chris Mason's mpatch library.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
156 |