@@ -42,6 +42,7 @@ extern PyObject *GitError;
4242extern PyTypeObject RefLogEntryType ;
4343extern PyTypeObject SignatureType ;
4444
45+ PyTypeObject ReferenceType ;
4546
4647void RefLogIter_dealloc (RefLogIter * self )
4748{
@@ -407,6 +408,70 @@ Reference_peel(Reference *self, PyObject *args)
407408 return wrap_object (obj , self -> repo );
408409}
409410
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+
410475PyDoc_STRVAR (RefLogEntry_committer__doc__ , "Committer." );
411476
412477PyObject *
@@ -541,7 +606,7 @@ PyTypeObject ReferenceType = {
541606 Reference__doc__ , /* tp_doc */
542607 0 , /* tp_traverse */
543608 0 , /* tp_clear */
544- 0 , /* tp_richcompare */
609+ Reference_richcompare , /* tp_richcompare */
545610 0 , /* tp_weaklistoffset */
546611 0 , /* tp_iter */
547612 0 , /* tp_iternext */
0 commit comments