@@ -42,6 +42,7 @@ extern PyObject *GitError;
42
42
extern PyTypeObject RefLogEntryType ;
43
43
extern PyTypeObject SignatureType ;
44
44
45
+ PyTypeObject ReferenceType ;
45
46
46
47
void RefLogIter_dealloc (RefLogIter * self )
47
48
{
@@ -407,6 +408,70 @@ Reference_peel(Reference *self, PyObject *args)
407
408
return wrap_object (obj , self -> repo );
408
409
}
409
410
411
+ PyObject *
412
+ Reference_richcompare (PyObject * o1 , PyObject * o2 , int op )
413
+ {
414
+ PyObject * res ;
415
+ Reference * obj1 ;
416
+ Reference * obj2 ;
417
+ const char * name1 ;
418
+ const char * name2 ;
419
+
420
+ if (!PyObject_TypeCheck (o2 , & ReferenceType )) {
421
+ Py_INCREF (Py_NotImplemented );
422
+ return Py_NotImplemented ;
423
+ }
424
+
425
+ switch (op ) {
426
+ case Py_NE :
427
+ obj1 = (Reference * ) o1 ;
428
+ obj2 = (Reference * ) o2 ;
429
+
430
+ CHECK_REFERENCE (obj1 );
431
+ CHECK_REFERENCE (obj2 );
432
+
433
+ name1 = git_reference_name (obj1 -> reference );
434
+ name2 = git_reference_name (obj2 -> reference );
435
+
436
+ if (strcmp (name1 , name2 ) != 0 ) {
437
+ res = Py_True ;
438
+ break ;
439
+ }
440
+
441
+ res = Py_False ;
442
+ break ;
443
+ case Py_EQ :
444
+ obj1 = (Reference * ) o1 ;
445
+ obj2 = (Reference * ) o2 ;
446
+
447
+ CHECK_REFERENCE (obj1 );
448
+ CHECK_REFERENCE (obj2 );
449
+
450
+ name1 = git_reference_name (obj1 -> reference );
451
+ name2 = git_reference_name (obj2 -> reference );
452
+
453
+ if (strcmp (name1 , name2 ) != 0 ) {
454
+ res = Py_False ;
455
+ break ;
456
+ }
457
+
458
+ res = Py_True ;
459
+ break ;
460
+ case Py_LT :
461
+ case Py_LE :
462
+ case Py_GT :
463
+ case Py_GE :
464
+ Py_INCREF (Py_NotImplemented );
465
+ return Py_NotImplemented ;
466
+ default :
467
+ PyErr_Format (PyExc_RuntimeError , "Unexpected '%d' op" , op );
468
+ return NULL ;
469
+ }
470
+
471
+ Py_INCREF (res );
472
+ return res ;
473
+ }
474
+
410
475
PyDoc_STRVAR (RefLogEntry_committer__doc__ , "Committer." );
411
476
412
477
PyObject *
@@ -541,7 +606,7 @@ PyTypeObject ReferenceType = {
541
606
Reference__doc__ , /* tp_doc */
542
607
0 , /* tp_traverse */
543
608
0 , /* tp_clear */
544
- 0 , /* tp_richcompare */
609
+ Reference_richcompare , /* tp_richcompare */
545
610
0 , /* tp_weaklistoffset */
546
611
0 , /* tp_iter */
547
612
0 , /* tp_iternext */
0 commit comments