From 4fa43e234ec0b360de62f948b10dab10e8c7afc0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=2E=20David=20Ib=C3=A1=C3=B1ez?= <jdavid.ibp@gmail.com>
Date: Tue, 21 Jun 2016 23:15:56 +0200
Subject: [PATCH 01/31] docs, update version

---
 docs/conf.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/conf.py b/docs/conf.py
index e98c238..87586f1 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -52,7 +52,7 @@ copyright = u'2010-2015 The pygit2 contributors'
 # The short X.Y version.
 version = '0.24'
 # The full version, including alpha/beta/rc tags.
-release = '0.24.0'
+release = '0.24.1'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.

From e96d0286b891575b01b9b02e994da749139980bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 3 Jul 2016 15:41:23 +0200
Subject: [PATCH 02/31] Create appveyor.yml

---
 appveyor.yml | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 appveyor.yml

diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000..83ef925
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,19 @@
+version: 1.0.{build}
+image: Visual Studio 2015
+configuration: Release
+build_script:
+- cmd: |
+    set LIBGIT2=%APPVEYOR_BUILD_FOLDER%\build\libgit2
+    git clone --depth=1 -b maint/v0.24 https://github.com/libgit2/libgit2.git libgit2
+    mkdir build
+    
+    pushd build
+    cmake -DSTDCALL=OFF -DBUILD_CLAR=OFF -DCMAKE_INSTALL_PREFIX=%LIBGIT2% ../libgit2 -G"Visual Studio 11 Win64"
+    cmake --build . --config Release --target install
+    popd
+    
+    C:\Python35-x64\Scripts\pip.exe install wheel
+    C:\Python35-x64\python.exe setup.py bdist_wheel 
+  
+artifacts:
+- path: build\*

From 6c4fa88d076a29cfdd2b86da8d14f0ac8bef9c59 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 3 Jul 2016 15:49:39 +0200
Subject: [PATCH 03/31] using cd,cd .. instead of popd

---
 appveyor.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/appveyor.yml b/appveyor.yml
index 83ef925..06b664b 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -7,10 +7,10 @@ build_script:
     git clone --depth=1 -b maint/v0.24 https://github.com/libgit2/libgit2.git libgit2
     mkdir build
     
-    pushd build
+    cd build
     cmake -DSTDCALL=OFF -DBUILD_CLAR=OFF -DCMAKE_INSTALL_PREFIX=%LIBGIT2% ../libgit2 -G"Visual Studio 11 Win64"
     cmake --build . --config Release --target install
-    popd
+    cd ..
     
     C:\Python35-x64\Scripts\pip.exe install wheel
     C:\Python35-x64\python.exe setup.py bdist_wheel 

From 5864b17b570e0beecce75c19c7c562e6f40ce2ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 3 Jul 2016 16:03:05 +0200
Subject: [PATCH 04/31] archive wheels

---
 appveyor.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index 06b664b..3257b27 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -16,4 +16,4 @@ build_script:
     C:\Python35-x64\python.exe setup.py bdist_wheel 
   
 artifacts:
-- path: build\*
+- path: dist\*.whl

From df53551cb293e06b053ef2e5f41562c3aa922066 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 3 Jul 2016 16:13:21 +0200
Subject: [PATCH 05/31] Build 32 and 64 bit version

---
 appveyor.yml | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/appveyor.yml b/appveyor.yml
index 3257b27..63fdc8c 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,6 +1,15 @@
 version: 1.0.{build}
 image: Visual Studio 2015
 configuration: Release
+  matrix:
+  - ARCH: 32
+    GENERATOR: '"Visual Studio 11"'
+    PYTHON: '"C:\Python35\python.exe"'
+    PIP: '"C:\Python35\Scripts\pip.exe"'
+  - ARCH: 64
+    GENERATOR: '"Visual Studio 11 Win64"'
+    PYTHON: '"C:\Python35-x64\python.exe"'
+    PIP: '"C:\Python35-x64\Scripts\pip.exe"'
 build_script:
 - cmd: |
     set LIBGIT2=%APPVEYOR_BUILD_FOLDER%\build\libgit2
@@ -8,12 +17,12 @@ build_script:
     mkdir build
     
     cd build
-    cmake -DSTDCALL=OFF -DBUILD_CLAR=OFF -DCMAKE_INSTALL_PREFIX=%LIBGIT2% ../libgit2 -G"Visual Studio 11 Win64"
+    cmake -DSTDCALL=OFF -DBUILD_CLAR=OFF -DCMAKE_INSTALL_PREFIX=%LIBGIT2% ../libgit2 -G %GENERATOR%
     cmake --build . --config Release --target install
     cd ..
     
-    C:\Python35-x64\Scripts\pip.exe install wheel
-    C:\Python35-x64\python.exe setup.py bdist_wheel 
+    %PIP% install wheel
+    %PYTHON% setup.py bdist_wheel 
   
 artifacts:
 - path: dist\*.whl

From 68de0f8bb663c32c63a36adbebaf5688f520d64a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 3 Jul 2016 16:14:26 +0200
Subject: [PATCH 06/31] fix yaml error

---
 appveyor.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index 63fdc8c..d684ce1 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,7 +1,7 @@
 version: 1.0.{build}
 image: Visual Studio 2015
 configuration: Release
-  matrix:
+matrix:
   - ARCH: 32
     GENERATOR: '"Visual Studio 11"'
     PYTHON: '"C:\Python35\python.exe"'

From 96beae5c820554aac9693bba24f06b2e76cdb1c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 3 Jul 2016 16:15:41 +0200
Subject: [PATCH 07/31] fix yaml error

---
 appveyor.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index d684ce1..e5322df 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,7 +1,8 @@
 version: 1.0.{build}
 image: Visual Studio 2015
 configuration: Release
-matrix:
+environment:
+  matrix:
   - ARCH: 32
     GENERATOR: '"Visual Studio 11"'
     PYTHON: '"C:\Python35\python.exe"'

From ca444f3c7dcde91ac219bcb8661d4e71398d13cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 3 Jul 2016 16:54:40 +0200
Subject: [PATCH 08/31] Update appveyor.yml

---
 appveyor.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index e5322df..ab3dd97 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -24,6 +24,7 @@ build_script:
     
     %PIP% install wheel
     %PYTHON% setup.py bdist_wheel 
-  
+test_script:
+- cmd: '%PYTHON% setup.py test'
 artifacts:
 - path: dist\*.whl

From c57a3aeb225cbe325538ec4e17a704f847778abe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 3 Jul 2016 17:01:26 +0200
Subject: [PATCH 09/31] install locally

---
 appveyor.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/appveyor.yml b/appveyor.yml
index ab3dd97..c6fa681 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -24,6 +24,8 @@ build_script:
     
     %PIP% install wheel
     %PYTHON% setup.py bdist_wheel 
+    %PIP% install .
+    
 test_script:
 - cmd: '%PYTHON% setup.py test'
 artifacts:

From ffc514fa24974db67318f977c7cbd4243c6340ce Mon Sep 17 00:00:00 2001
From: mrh1997 <robert.hoelzl@posteo.de>
Date: Mon, 11 Jul 2016 14:41:39 +0200
Subject: [PATCH 10/31] Ammend the doc-string of Repository.diff()

According to the old documentation, it was not clear how to compare
working directory/index to a git object.
---
 pygit2/repository.py | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/pygit2/repository.py b/pygit2/repository.py
index 693d7a4..aeeb981 100644
--- a/pygit2/repository.py
+++ b/pygit2/repository.py
@@ -322,8 +322,23 @@ class Repository(_Repository):
 
         Keyword arguments:
 
+        a
+            None, a str (that refers to an Object, see revparse_single()) or a 
+            Reference object.
+            If None, b must be None, too. In this case the working directory is
+            compared with the index. Otherwise the referred object is compared to
+            'b'.
+        
+        b
+            None, a str (that refers to an Object, see revparse_single()) or a
+            Reference object.
+            If None, the working directory is compared to 'a'. (except
+            'cached' is True, in which case the index is compared to 'a').
+            Otherwise the referred object is compared to 'a'
+    
         cached
-            use staged changes instead of workdir
+            if 'b' is None, by default the working directory is compared to 'a'.
+            If 'cached' is set to True, the index/staging area is used for comparing.
 
         flag
             a GIT_DIFF_* constant

From cdd57b2c0f6fade04dc4cb6b33ad7bdb62994bed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Fri, 22 Jul 2016 10:46:11 +0200
Subject: [PATCH 11/31] make sure the repo object will be collected before the
 repo is removed

---
 test/utils.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/test/utils.py b/test/utils.py
index a751e91..01c07b5 100644
--- a/test/utils.py
+++ b/test/utils.py
@@ -35,6 +35,7 @@ import tarfile
 import tempfile
 import unittest
 import hashlib
+import gc
 
 import pygit2
 
@@ -94,6 +95,7 @@ class NoRepoTestCase(unittest.TestCase):
 
     def tearDown(self):
         del self.repo
+        gc.collect()
         rmtree(self._temp_dir)
 
     def assertRaisesAssign(self, exc_class, instance, name, value):
@@ -132,8 +134,8 @@ class AutoRepoTestCase(NoRepoTestCase):
         self.repo = pygit2.Repository(self.repo_path)
 
     def tearDown(self):
-        self.repo_ctxtmgr.__exit__(None, None, None)
         super(AutoRepoTestCase, self).tearDown()
+        self.repo_ctxtmgr.__exit__(None, None, None)
 
 
 class BareRepoTestCase(AutoRepoTestCase):

From fd1e9e3d356eda0d0c4c528fe5864f2af350ff61 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 24 Jul 2016 15:54:54 +0200
Subject: [PATCH 12/31] Update appveyor.yml

upload test results
---
 appveyor.yml | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index c6fa681..b37f6e5 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -27,6 +27,11 @@ build_script:
     %PIP% install .
     
 test_script:
-- cmd: '%PYTHON% setup.py test'
+- ps: >-
+    & $env:PYTHON setup.py nosetests --with-xunit
+    # upload results to AppVeyor
+    $wc = New-Object 'System.Net.WebClient'
+    $wc.UploadFile("https://ci.appveyor.com/api/testresults/xunit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\nosetests.xml))
+
 artifacts:
 - path: dist\*.whl

From 7fe7a4da8d22d424e0c21109828d42349e66c1ee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 24 Jul 2016 21:50:17 +0200
Subject: [PATCH 13/31] Remove qoutes from env vars

---
 appveyor.yml | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/appveyor.yml b/appveyor.yml
index b37f6e5..2632a2d 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -4,13 +4,13 @@ configuration: Release
 environment:
   matrix:
   - ARCH: 32
-    GENERATOR: '"Visual Studio 11"'
-    PYTHON: '"C:\Python35\python.exe"'
-    PIP: '"C:\Python35\Scripts\pip.exe"'
+    GENERATOR: 'Visual Studio 11'
+    PYTHON: 'C:\Python35\python.exe'
+    PIP: 'C:\Python35\Scripts\pip.exe'
   - ARCH: 64
-    GENERATOR: '"Visual Studio 11 Win64"'
-    PYTHON: '"C:\Python35-x64\python.exe"'
-    PIP: '"C:\Python35-x64\Scripts\pip.exe"'
+    GENERATOR: 'Visual Studio 11 Win64'
+    PYTHON: 'C:\Python35-x64\python.exe'
+    PIP: 'C:\Python35-x64\Scripts\pip.exe'
 build_script:
 - cmd: |
     set LIBGIT2=%APPVEYOR_BUILD_FOLDER%\build\libgit2
@@ -18,13 +18,13 @@ build_script:
     mkdir build
     
     cd build
-    cmake -DSTDCALL=OFF -DBUILD_CLAR=OFF -DCMAKE_INSTALL_PREFIX=%LIBGIT2% ../libgit2 -G %GENERATOR%
+    cmake -DSTDCALL=OFF -DBUILD_CLAR=OFF -DCMAKE_INSTALL_PREFIX="%LIBGIT2%" ../libgit2 -G "%GENERATOR%"
     cmake --build . --config Release --target install
     cd ..
     
-    %PIP% install wheel
-    %PYTHON% setup.py bdist_wheel 
-    %PIP% install .
+    "%PIP%" install wheel
+    "%PYTHON%" setup.py bdist_wheel 
+    "%PIP%" install .
     
 test_script:
 - ps: >-

From 1afbde0d7f6b14455c27d80a7a1eb41337db378d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 24 Jul 2016 21:56:21 +0200
Subject: [PATCH 14/31] install dependencies in init script

---
 appveyor.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index 2632a2d..1fbed6b 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -11,6 +11,8 @@ environment:
     GENERATOR: 'Visual Studio 11 Win64'
     PYTHON: 'C:\Python35-x64\python.exe'
     PIP: 'C:\Python35-x64\Scripts\pip.exe'
+init:
+- cmd: '%PIP% install nose wheel'
 build_script:
 - cmd: |
     set LIBGIT2=%APPVEYOR_BUILD_FOLDER%\build\libgit2
@@ -22,7 +24,6 @@ build_script:
     cmake --build . --config Release --target install
     cd ..
     
-    "%PIP%" install wheel
     "%PYTHON%" setup.py bdist_wheel 
     "%PIP%" install .
     

From 0e270c72bd15ceb2c465186de500316e62f0dec5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 24 Jul 2016 22:12:00 +0200
Subject: [PATCH 15/31] Update appveyor.yml

---
 appveyor.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index 1fbed6b..c240d33 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -26,7 +26,8 @@ build_script:
     
     "%PYTHON%" setup.py bdist_wheel 
     "%PIP%" install .
-    
+on_failure:
+- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
 test_script:
 - ps: >-
     & $env:PYTHON setup.py nosetests --with-xunit

From dae61ded382fe3fab02504c9483714cb65c3e560 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 24 Jul 2016 22:52:41 +0200
Subject: [PATCH 16/31] Update appveyor.yml

---
 appveyor.yml | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/appveyor.yml b/appveyor.yml
index c240d33..4d6e69c 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -26,11 +26,10 @@ build_script:
     
     "%PYTHON%" setup.py bdist_wheel 
     "%PIP%" install .
-on_failure:
-- ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
 test_script:
 - ps: >-
-    & $env:PYTHON setup.py nosetests --with-xunit
+    cp build\Release\git2.dll .
+    try { & $env:PYTHON setup.py nosetests --with-xunit }
     # upload results to AppVeyor
     $wc = New-Object 'System.Net.WebClient'
     $wc.UploadFile("https://ci.appveyor.com/api/testresults/xunit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\nosetests.xml))

From 30980751cfd3ff63844b641e9d8e663c3fb2d7dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 24 Jul 2016 22:55:05 +0200
Subject: [PATCH 17/31] Update appveyor.yml

---
 appveyor.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index 4d6e69c..da7be71 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -27,7 +27,7 @@ build_script:
     "%PYTHON%" setup.py bdist_wheel 
     "%PIP%" install .
 test_script:
-- ps: >-
+- ps: |
     cp build\Release\git2.dll .
     try { & $env:PYTHON setup.py nosetests --with-xunit }
     # upload results to AppVeyor

From faf6a63d25d9c12d7480e9b4faf4d6531b13b7c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 24 Jul 2016 22:57:05 +0200
Subject: [PATCH 18/31] Update appveyor.yml

---
 appveyor.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index da7be71..4cc0400 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -29,7 +29,7 @@ build_script:
 test_script:
 - ps: |
     cp build\Release\git2.dll .
-    try { & $env:PYTHON setup.py nosetests --with-xunit }
+    try { & $env:PYTHON setup.py nosetests --with-xunit } catch {}
     # upload results to AppVeyor
     $wc = New-Object 'System.Net.WebClient'
     $wc.UploadFile("https://ci.appveyor.com/api/testresults/xunit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\nosetests.xml))

From 54e4da837b138c4c7a7ed3aa7a24917af1516fba Mon Sep 17 00:00:00 2001
From: mrh1997 <robert.hoelzl@posteo.de>
Date: Tue, 13 Sep 2016 22:31:49 +0200
Subject: [PATCH 19/31] Support non-english errors with non-ascii chars.

Libgit2 partially forwards OS error message texts.
On non-english Windows OSes these errors may contain non-ascii characters (i.e. umlauts).
To avoid that a UnicodeDecodeError is raised the error message is interpreted as UTF-8.
The solution should not be necessary on linux/osx as they return always ascii (as far as I know).
Thus this solution will not change the behaviour on linux/osx.
---
 pygit2/errors.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pygit2/errors.py b/pygit2/errors.py
index e814440..363ed42 100644
--- a/pygit2/errors.py
+++ b/pygit2/errors.py
@@ -40,7 +40,7 @@ def check_error(err, io=False):
     # Error message
     giterr = C.giterr_last()
     if giterr != ffi.NULL:
-        message = ffi.string(giterr.message).decode()
+        message = ffi.string(giterr.message).decode('utf8')
     else:
         message = "err %d (no message provided)" % err
 

From 578cf58cd780a0a1dc90a5e056ef7a9337523c0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= <cmn@dwim.me>
Date: Mon, 3 Oct 2016 20:31:56 +0200
Subject: [PATCH 20/31] Add Repository.create_reference to the automethod list

---
 docs/repository.rst | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/repository.rst b/docs/repository.rst
index ff88007..ca85788 100644
--- a/docs/repository.rst
+++ b/docs/repository.rst
@@ -73,3 +73,4 @@ Below there are some general attributes and methods:
 .. automethod:: pygit2.Repository.ahead_behind
 .. automethod:: pygit2.Repository.describe
 .. automethod:: pygit2.Repository.path_is_ignored
+.. automethod:: pygit2.Repository.create_reference

From 9b364dc7f36c2fba06fabb016c520812775d7e1e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=2E=20David=20Ib=C3=A1=C3=B1ez?= <jdavid.ibp@gmail.com>
Date: Fri, 7 Oct 2016 17:40:25 +0200
Subject: [PATCH 21/31] Readme, badge to appveyor

---
 README.rst | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/README.rst b/README.rst
index 893b0f4..3f8446b 100644
--- a/README.rst
+++ b/README.rst
@@ -5,6 +5,9 @@ pygit2 - libgit2 bindings in Python
 .. image:: https://travis-ci.org/libgit2/pygit2.svg?branch=master
    :target: http://travis-ci.org/libgit2/pygit2
 
+.. image:: https://ci.appveyor.com/api/projects/status/edmwc0dctk5nacx0/branch/master?svg=true
+   :target: https://ci.appveyor.com/project/jdavid/pygit2/branch/master
+
 Pygit2 is a set of Python bindings to the libgit2 shared library, libgit2
 implements Git plumbing.  Pygit2 works with Python 2.7, 3.2, 3.3, 3.4, 3.5 and
 PyPy 2.6

From 865c2f0e829a8c5cefcdd0573ceac27874e2c0b8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=2E=20David=20Ib=C3=A1=C3=B1ez?= <jdavid.ibp@gmail.com>
Date: Fri, 14 Oct 2016 09:45:34 +0200
Subject: [PATCH 22/31] Revert "Update appveyor.yml"

This reverts commit faf6a63d25d9c12d7480e9b4faf4d6531b13b7c3.
---
 appveyor.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index 4cc0400..da7be71 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -29,7 +29,7 @@ build_script:
 test_script:
 - ps: |
     cp build\Release\git2.dll .
-    try { & $env:PYTHON setup.py nosetests --with-xunit } catch {}
+    try { & $env:PYTHON setup.py nosetests --with-xunit }
     # upload results to AppVeyor
     $wc = New-Object 'System.Net.WebClient'
     $wc.UploadFile("https://ci.appveyor.com/api/testresults/xunit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\nosetests.xml))

From e873c6a363ee75ba3ad24bef15a0c5606727c301 Mon Sep 17 00:00:00 2001
From: anatoly techtonik <techtonik@gmail.com>
Date: Sat, 15 Oct 2016 20:17:28 +0300
Subject: [PATCH 23/31] appveyor.yml Attempt to fix test run

broken by 865c2f0
---
 appveyor.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index da7be71..6d59c9b 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -29,7 +29,7 @@ build_script:
 test_script:
 - ps: |
     cp build\Release\git2.dll .
-    try { & $env:PYTHON setup.py nosetests --with-xunit }
+    &$env:PYTHON setup.py nosetests --with-xunit
     # upload results to AppVeyor
     $wc = New-Object 'System.Net.WebClient'
     $wc.UploadFile("https://ci.appveyor.com/api/testresults/xunit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\nosetests.xml))

From da59cb1c9289ca1397fa907e4d419cebc91d4743 Mon Sep 17 00:00:00 2001
From: anatoly techtonik <techtonik@gmail.com>
Date: Tue, 18 Oct 2016 12:40:05 +0300
Subject: [PATCH 24/31] appveyor.yml Attempt to fix test failure reporting

https://www.appveyor.com/docs/build-configuration/#script-blocks-in-build-configuration
---
 appveyor.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/appveyor.yml b/appveyor.yml
index 6d59c9b..29b50f5 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -30,6 +30,7 @@ test_script:
 - ps: |
     cp build\Release\git2.dll .
     &$env:PYTHON setup.py nosetests --with-xunit
+    if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
     # upload results to AppVeyor
     $wc = New-Object 'System.Net.WebClient'
     $wc.UploadFile("https://ci.appveyor.com/api/testresults/xunit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\nosetests.xml))

From e2393a5e24a0657097aa0c771e96eff1b22ff859 Mon Sep 17 00:00:00 2001
From: anatoly techtonik <techtonik@gmail.com>
Date: Tue, 18 Oct 2016 13:51:03 +0300
Subject: [PATCH 25/31] appveyor.yml Fix nosetests report upload

/xunit/ endpoint in AppVeyor is made for uploading xUnit.net reports
http://help.appveyor.com/discussions/problems/5264-xunit-results-are-not-being-parsed
---
 appveyor.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index 29b50f5..f9b7fd0 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -33,7 +33,7 @@ test_script:
     if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
     # upload results to AppVeyor
     $wc = New-Object 'System.Net.WebClient'
-    $wc.UploadFile("https://ci.appveyor.com/api/testresults/xunit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\nosetests.xml))
+    $wc.UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\nosetests.xml))
 
 artifacts:
 - path: dist\*.whl

From 00dd78bf1b316e398280f13fa266f117294dc846 Mon Sep 17 00:00:00 2001
From: Matthias Bartelmess <mba@fourplusone.de>
Date: Fri, 21 Oct 2016 06:06:40 +0300
Subject: [PATCH 26/31] Fix windows tests

---
 pygit2/errors.py        |  4 +++-
 pygit2/remote.py        | 21 +++++++++------------
 test/test_remote.py     |  6 ++++++
 test/test_repository.py | 12 +++++++++---
 4 files changed, 27 insertions(+), 16 deletions(-)

diff --git a/pygit2/errors.py b/pygit2/errors.py
index 363ed42..57c155c 100644
--- a/pygit2/errors.py
+++ b/pygit2/errors.py
@@ -64,4 +64,6 @@ def check_error(err, io=False):
     raise GitError(message)
 
 # Indicate that we want libgit2 to pretend a function was not set
-Passthrough = Exception("The function asked for pass-through")
+class Passthrough(Exception):
+    def __init__(self):
+        super(Passthrough, self).__init__( "The function asked for pass-through")
diff --git a/pygit2/remote.py b/pygit2/remote.py
index 431b356..2ac9316 100644
--- a/pygit2/remote.py
+++ b/pygit2/remote.py
@@ -278,11 +278,9 @@ class RemoteCallbacks(object):
         try:
             ccred = get_credentials(credentials, url, username, allowed)
             cred_out[0] = ccred[0]
-
+        except Passthrough as e:
+            return C.GIT_PASSTHROUGH
         except Exception as e:
-            if e is Passthrough:
-                return C.GIT_PASSTHROUGH
-
             self._stored_exception = e
             return C.GIT_EUSER
 
@@ -308,15 +306,14 @@ class RemoteCallbacks(object):
             val = certificate_check(None, bool(valid), ffi.string(host))
             if not val:
                 return C.GIT_ECERTIFICATE
+        except Passthrough as e:
+            if is_ssh:
+                return 0
+            elif valid:
+                return 0
+            else:
+                return C.GIT_ECERTIFICATE
         except Exception as e:
-            if e is Passthrough:
-                if is_ssh:
-                    return 0
-                elif valid:
-                    return 0
-                else:
-                    return C.GIT_ECERTIFICATE
-
             self._stored_exception = e
             return C.GIT_EUSER
 
diff --git a/test/test_remote.py b/test/test_remote.py
index 489a6ae..5d76f06 100644
--- a/test/test_remote.py
+++ b/test/test_remote.py
@@ -33,6 +33,7 @@ import pygit2
 import sys
 from pygit2 import Oid
 from . import utils
+import gc
 
 try:
     import __pypy__
@@ -238,6 +239,11 @@ class PushTestCase(unittest.TestCase):
         self.remote = self.clone.create_remote('origin', self.origin.path)
 
     def tearDown(self):
+        self.origin = None
+        self.clone = None
+        self.remote = None
+        gc.collect()
+        
         self.origin_ctxtmgr.__exit__(None, None, None)
         self.clone_ctxtmgr.__exit__(None, None, None)
 
diff --git a/test/test_repository.py b/test/test_repository.py
index 5590ea2..2c59465 100644
--- a/test/test_repository.py
+++ b/test/test_repository.py
@@ -41,6 +41,12 @@ import sys
 
 import six
 
+if six.PY2:
+    from urllib import pathname2url
+    
+if six.PY3:
+    from urllib.request import pathname2url
+
 # Import from pygit2
 from pygit2 import GIT_OBJ_ANY, GIT_OBJ_BLOB, GIT_OBJ_COMMIT
 from pygit2 import init_repository, clone_repository, discover_repository
@@ -192,8 +198,8 @@ class RepositoryTest(utils.BareRepoTestCase):
 
     def test_hashfile(self):
         data = "bazbarfoo"
-        tempfile_path = tempfile.mkstemp()[1]
-        with open(tempfile_path, 'w') as fh:
+        handle, tempfile_path = tempfile.mkstemp()
+        with os.fdopen(handle, 'w') as fh:
             fh.write(data)
         hashed_sha1 = hashfile(tempfile_path)
         os.unlink(tempfile_path)
@@ -513,7 +519,7 @@ class CloneRepositoryTest(utils.NoRepoTestCase):
     def test_clone_repository_and_remote_callbacks(self):
         src_repo_relpath = "./test/data/testrepo.git/"
         repo_path = os.path.join(self._temp_dir, "clone-into")
-        url = 'file://' + os.path.realpath(src_repo_relpath)
+        url = 'file:' + pathname2url(os.path.realpath(src_repo_relpath))
 
         def create_repository(path, bare):
             return init_repository(path, bare)

From 825f3e45bdc54caa07395e3e40d99b0c27dc6518 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Fri, 21 Oct 2016 06:31:19 +0300
Subject: [PATCH 27/31] add slashes to URL if needed

---
 test/test_repository.py | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/test/test_repository.py b/test/test_repository.py
index 2c59465..cfdf01e 100644
--- a/test/test_repository.py
+++ b/test/test_repository.py
@@ -519,7 +519,12 @@ class CloneRepositoryTest(utils.NoRepoTestCase):
     def test_clone_repository_and_remote_callbacks(self):
         src_repo_relpath = "./test/data/testrepo.git/"
         repo_path = os.path.join(self._temp_dir, "clone-into")
-        url = 'file:' + pathname2url(os.path.realpath(src_repo_relpath))
+        url = pathname2url(os.path.realpath(src_repo_relpath))
+        
+        if url.startswith('///'):
+            url = 'file:' + url
+        else:
+            url = 'file://' + url
 
         def create_repository(path, bare):
             return init_repository(path, bare)

From ee28de65a0090f0d645acde7ee57f32b48a086a4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Robert=20H=C3=B6lzl?= <robert.hoelzl@posteo.de>
Date: Sun, 23 Oct 2016 23:55:53 +0200
Subject: [PATCH 28/31] Extend comment of Remote.push by note about
 push_update_reference.

As happened in support request https://github.com/libgit2/libgit2/issues/3963 it can be easily overseen,
that push returns True, when the remote has installed a hook that denies the commits.
---
 pygit2/remote.py | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/pygit2/remote.py b/pygit2/remote.py
index 2ac9316..4ccf6ff 100644
--- a/pygit2/remote.py
+++ b/pygit2/remote.py
@@ -413,6 +413,12 @@ class Remote(object):
         """Push the given refspec to the remote. Raises ``GitError`` on
         protocol error or unpack failure.
 
+        When the remote has a githook installed, that denies the reference
+        this function will return successfully. Thus it is stronly recommended
+        to install a callback, that implements
+        :py:meth:`RemoteCallbacks.push_update_reference` and check the passed
+        parameters for successfull operations.
+
         :param [str] specs: push refspecs to use
         """
         push_opts = ffi.new('git_push_options *')

From db213113f4fccd3e8ea32e1b38e50715e0a52235 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 30 Oct 2016 12:52:25 +0200
Subject: [PATCH 29/31] Fix/appveyor all (#1)

* Create python-33.yml

* Delete python-33.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Update appveyor.yml

* Use weakref for conflicts caching

To prevent GC issues for python <= 3.3, use a weak reference for Index._conflicts

* Update index.py

* Update appveyor.yml
---
 appveyor.yml    | 30 ++++++++++++++++++++++--------
 pygit2/index.py | 10 +++++++---
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/appveyor.yml b/appveyor.yml
index f9b7fd0..b6d92c2 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -3,16 +3,29 @@ image: Visual Studio 2015
 configuration: Release
 environment:
   matrix:
-  - ARCH: 32
-    GENERATOR: 'Visual Studio 11'
+  - GENERATOR: 'Visual Studio 10'
+    PYTHON: 'C:\Python27\python.exe'
+  - GENERATOR: 'Visual Studio 10 Win64'
+    PYTHON: 'C:\Python27-x64\python.exe'
+  - GENERATOR: 'Visual Studio 10'
+    PYTHON: 'C:\Python32\python.exe'
+  - GENERATOR: 'Visual Studio 10 Win64'
+    PYTHON: 'C:\Python32-x64\python.exe'
+  - GENERATOR: 'Visual Studio 10'
+    PYTHON: 'C:\Python33\python.exe'
+  - GENERATOR: 'Visual Studio 10 Win64'
+    PYTHON: 'C:\Python33-x64\python.exe'
+  - GENERATOR: 'Visual Studio 10'
+    PYTHON: 'C:\Python34\python.exe'
+  - GENERATOR: 'Visual Studio 10 Win64'
+    PYTHON: 'C:\Python34-x64\python.exe'
+  - GENERATOR: 'Visual Studio 14'
     PYTHON: 'C:\Python35\python.exe'
-    PIP: 'C:\Python35\Scripts\pip.exe'
-  - ARCH: 64
-    GENERATOR: 'Visual Studio 11 Win64'
+  - GENERATOR: 'Visual Studio 14 Win64'
     PYTHON: 'C:\Python35-x64\python.exe'
-    PIP: 'C:\Python35-x64\Scripts\pip.exe'
+
 init:
-- cmd: '%PIP% install nose wheel'
+- cmd: '%PYTHON% -m pip install -U nose wheel'
 build_script:
 - cmd: |
     set LIBGIT2=%APPVEYOR_BUILD_FOLDER%\build\libgit2
@@ -24,8 +37,9 @@ build_script:
     cmake --build . --config Release --target install
     cd ..
     
+    IF "%GENERATOR%"=="Visual Studio 10 Win64" ( call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" )
+    
     "%PYTHON%" setup.py bdist_wheel 
-    "%PIP%" install .
 test_script:
 - ps: |
     cp build\Release\git2.dll .
diff --git a/pygit2/index.py b/pygit2/index.py
index d312bb6..f36a0d1 100644
--- a/pygit2/index.py
+++ b/pygit2/index.py
@@ -28,6 +28,8 @@
 # Import from the future
 from __future__ import absolute_import, unicode_literals
 
+import weakref
+
 # Import from pygit2
 from _pygit2 import Oid, Tree, Diff
 from .errors import check_error
@@ -305,10 +307,12 @@ class Index(object):
             self._conflicts = None
             return None
 
-        if self._conflicts is None:
-            self._conflicts = ConflictCollection(self)
+        if self._conflicts is None or self._conflicts() is None:
+            conflicts = ConflictCollection(self)
+            self._conflicts = weakref.ref(conflicts)
+            return conflicts
 
-        return self._conflicts
+        return self._conflicts()
 
 
 class IndexEntry(object):

From 44ef9ad2e9371ea16b302e0938da732868756691 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matthias=20Bartelme=C3=9F?= <mba@fourplusone.de>
Date: Sun, 30 Oct 2016 11:55:36 +0100
Subject: [PATCH 30/31] Remove python 3.2 from appveyor file since it is not
 supported

---
 appveyor.yml | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/appveyor.yml b/appveyor.yml
index b6d92c2..228279f 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -7,10 +7,6 @@ environment:
     PYTHON: 'C:\Python27\python.exe'
   - GENERATOR: 'Visual Studio 10 Win64'
     PYTHON: 'C:\Python27-x64\python.exe'
-  - GENERATOR: 'Visual Studio 10'
-    PYTHON: 'C:\Python32\python.exe'
-  - GENERATOR: 'Visual Studio 10 Win64'
-    PYTHON: 'C:\Python32-x64\python.exe'
   - GENERATOR: 'Visual Studio 10'
     PYTHON: 'C:\Python33\python.exe'
   - GENERATOR: 'Visual Studio 10 Win64'

From 66280af83a75d5b680c1014130e4bbbc9b75b6e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=2E=20David=20Ib=C3=A1=C3=B1ez?= <jdavid.ibp@gmail.com>
Date: Tue, 1 Nov 2016 20:34:50 +0100
Subject: [PATCH 31/31] Release 0.24.2

---
 .mailmap             |  4 +++
 README.rst           | 73 +++++++++++++++++++++++++++++---------------
 docs/conf.py         |  2 +-
 docs/development.rst |  3 ++
 docs/general.rst     | 10 +++---
 docs/install.rst     | 16 +++++-----
 pygit2/_build.py     |  2 +-
 7 files changed, 70 insertions(+), 40 deletions(-)

diff --git a/.mailmap b/.mailmap
index 6c74bd4..0f38635 100644
--- a/.mailmap
+++ b/.mailmap
@@ -18,3 +18,7 @@ Vlad Temian <vladtemian@gmail.com>
 Matthew Gamble <git@matthewgamble.net>
 
 Kaarel Kitsemets <kitsemets@gmail.com>
+
+Matthias Bartelmeß <mba@fourplusone.de>
+Robert Hölzl <robert.hoelzl@posteo.de>
+Anatoly Techtonik <techtonik@gmail.com>
diff --git a/README.rst b/README.rst
index 3f8446b..4fdb512 100644
--- a/README.rst
+++ b/README.rst
@@ -28,6 +28,27 @@ How to install
 Changelog
 ==============
 
+0.24.2 (2016-11-01)
+-------------------------
+
+- Unit tests pass on Windows, integration with AppVeyor
+  `#641 <https://github.com/libgit2/pygit2/pull/641>`_
+  `#655 <https://github.com/libgit2/pygit2/issues/655>`_
+  `#657 <https://github.com/libgit2/pygit2/pull/657>`_
+  `#659 <https://github.com/libgit2/pygit2/pull/659>`_
+  `#660 <https://github.com/libgit2/pygit2/pull/660>`_
+  `#661 <https://github.com/libgit2/pygit2/pull/661>`_
+  `#667 <https://github.com/libgit2/pygit2/pull/667>`_
+
+- Fix when libgit2 error messages have non-ascii chars
+  `#651 <https://github.com/libgit2/pygit2/pull/651>`_
+
+- Documentation improvements
+  `#643 <https://github.com/libgit2/pygit2/pull/643>`_
+  `#653 <https://github.com/libgit2/pygit2/pull/653>`_
+  `#663 <https://github.com/libgit2/pygit2/pull/663>`_
+
+
 0.24.1 (2016-06-21)
 -------------------------
 
@@ -800,30 +821,31 @@ Other: `#331 <https://github.com/libgit2/pygit2/pull/331>`_
 Authors
 ==============
 
-108 developers have contributed at least 1 commit to pygit2::
+112 developers have contributed at least 1 commit to pygit2::
 
   J. David Ibáñez           Carlos Martín Nieto       Nico von Geyso
-  W. Trevor King            Dave Borowitz             Daniel Rodríguez Troitiño
-  Richo Healey              Christian Boos            Julien Miotte
-  Richard Möhn              Xu Tao                    Jose Plana
-  Matthew Duggan            Matthew Gamble            Martin Lenders
-  Petr Hosek                Victor Garcia             Xavier Delannoy
-  Yonggang Luo              Patrick Steinhardt        Valentin Haenel
-  Michael Jones             Bernardo Heynemann        Brodie Rao
-  John Szakmeister          Vlad Temian               Nicolas Dandrimont
-  David Versmisse           Rémi Duraffort            Santiago Perez De Rosso
-  Sebastian Thiel           Thom Wiggers              Alok Singhal
-  Fraser Tweedale           Han-Wen Nienhuys          Leonardo Rhodes
-  Petr Viktorin             Ron Cohen                 Thomas Kluyver
-  Alex Chamberlain          Alexander Bayandin        Amit Bakshi
-  Andrey Devyatkin          Arno van Lumig            Ben Davis
-  Dustin Raimondi           Eric Schrijver            Greg Fitzgerald
-  Hervé Cauwelier           Huang Huang               Ian P. McCullough
-  Igor Gnatenko             Jack O'Connor             Jared Flatow
-  Jiunn Haur Lim            Jun Omae                  Kaarel Kitsemets
-  Kevin KIN-FOO             Masud Rahman              Michael Sondergaard
-  Ondřej Nový               Sarath Lakshman           Vicent Marti
-  Zoran Zaric               Adam Spiers               Andrew Chin
+  W. Trevor King            Dave Borowitz             Matthias Bartelmeß
+  Daniel Rodríguez Troitiño Richo Healey              Christian Boos
+  Julien Miotte             Richard Möhn              Xu Tao
+  Jose Plana                Matthew Duggan            Matthew Gamble
+  Martin Lenders            Petr Hosek                Victor Garcia
+  Xavier Delannoy           Yonggang Luo              Patrick Steinhardt
+  Valentin Haenel           Michael Jones             Bernardo Heynemann
+  Brodie Rao                John Szakmeister          Vlad Temian
+  Nicolas Dandrimont        David Versmisse           Rémi Duraffort
+  Santiago Perez De Rosso   Sebastian Thiel           Thom Wiggers
+  Alok Singhal              Fraser Tweedale           Han-Wen Nienhuys
+  Leonardo Rhodes           Petr Viktorin             Ron Cohen
+  Thomas Kluyver            anatoly techtonik         Alex Chamberlain
+  Alexander Bayandin        Amit Bakshi               Andrey Devyatkin
+  Arno van Lumig            Ben Davis                 Dustin Raimondi
+  Eric Schrijver            Greg Fitzgerald           Hervé Cauwelier
+  Huang Huang               Ian P. McCullough         Igor Gnatenko
+  Jack O'Connor             Jared Flatow              Jiunn Haur Lim
+  Jun Omae                  Kaarel Kitsemets          Kevin KIN-FOO
+  Masud Rahman              Michael Sondergaard       Ondřej Nový
+  Sarath Lakshman           Vicent Marti              Zoran Zaric
+  mrh1997                   Adam Spiers               Andrew Chin
   András Veres-Szentkirályi Ash Berlin                Benjamin Kircher
   Benjamin Pollack          Bryan O'Sullivan          Cam Cope
   Chason Chaffin            Chris Rebert              Colin Watson
@@ -835,9 +857,10 @@ Authors
   Justin Clift              Kyriakos Oikonomakos      Lukas Fleischer
   Mathieu Bridon            Nicolás Sanguinetti       Noah Fontes
   Óscar San José            Peter Dave Hello          Philippe Ombredanne
-  Ridge Kennedy             Ross Nicoll               Rui Abreu Ferreira
-  Sheeo                     Soasme                    Vladimir Rutsky
-  Yu Jianjian               chengyuhang               earl
+  Ridge Kennedy             Robert Hölzl              Ross Nicoll
+  Rui Abreu Ferreira        Sheeo                     Soasme
+  Vladimir Rutsky           Yu Jianjian               chengyuhang
+  earl
 
 
 License
diff --git a/docs/conf.py b/docs/conf.py
index 87586f1..9cff9b1 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -52,7 +52,7 @@ copyright = u'2010-2015 The pygit2 contributors'
 # The short X.Y version.
 version = '0.24'
 # The full version, including alpha/beta/rc tags.
-release = '0.24.1'
+release = '0.24.2'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/docs/development.rst b/docs/development.rst
index d9ecf83..fc9b1c2 100644
--- a/docs/development.rst
+++ b/docs/development.rst
@@ -5,6 +5,9 @@ The development version
 .. image:: https://travis-ci.org/libgit2/pygit2.svg?branch=master
    :target: http://travis-ci.org/libgit2/pygit2
 
+.. image:: https://ci.appveyor.com/api/projects/status/edmwc0dctk5nacx0/branch/master?svg=true
+   :target: https://ci.appveyor.com/project/jdavid/pygit2/branch/master
+
 .. code-block:: sh
 
     $ git clone git://github.com/libgit2/pygit2.git
diff --git a/docs/general.rst b/docs/general.rst
index 4afdcaa..d17490f 100644
--- a/docs/general.rst
+++ b/docs/general.rst
@@ -18,7 +18,7 @@ library that has been built against. The version number has a
 .. py:data:: LIBGIT2_VER_MAJOR
 
    Integer value of the major version number. For example, for the version
-   ``0.24.1``::
+   ``0.24.2``::
 
       >>> print LIBGIT2_VER_MAJOR
       0
@@ -26,7 +26,7 @@ library that has been built against. The version number has a
 .. py:data:: LIBGIT2_VER_MINOR
 
    Integer value of the minor version number. For example, for the version
-   ``0.24.1``::
+   ``0.24.2``::
 
       >>> print LIBGIT2_VER_MINOR
       24
@@ -34,17 +34,17 @@ library that has been built against. The version number has a
 .. py:data:: LIBGIT2_VER_REVISION
 
    Integer value of the revision version number. For example, for the version
-   ``0.24.1``::
+   ``0.24.2``::
 
       >>> print LIBGIT2_VER_REVISION
-      1
+      2
 
 .. py:data:: LIBGIT2_VERSION
 
    The libgit2 version number as a string::
 
       >>> print LIBGIT2_VERSION
-      '0.24.1'
+      '0.24.2'
 
 Errors
 ======
diff --git a/docs/install.rst b/docs/install.rst
index e89e841..094333e 100644
--- a/docs/install.rst
+++ b/docs/install.rst
@@ -43,11 +43,11 @@ while the last number |lq| *.micro* |rq| auto-increments independently.
 
 As illustration see this table of compatible releases:
 
-+-----------+----------------+----------------------------------------+
-|**libgit2**| 0.24.0, 0.24.1 | 0.23.0, 0.23.1, 0.23.2, 0.23.3, 0.23.4 |
-+-----------+----------------+----------------------------------------+
-|**pygit2** | 0.24.0, 0.24.1 | 0.23.0, 0.23.1, 0.23.2, 0.23.3         |
-+-----------+----------------+----------------------------------------+
++-----------+-----------------------+----------------------------------------+
+|**libgit2**| 0.24.0, 0.24.1 0.24.2 | 0.23.0, 0.23.1, 0.23.2, 0.23.3, 0.23.4 |
++-----------+-----------------------+----------------------------------------+
+|**pygit2** | 0.24.0, 0.24.1 0.24.2 | 0.23.0, 0.23.1, 0.23.2, 0.23.3         |
++-----------+-----------------------+----------------------------------------+
 
 .. warning::
 
@@ -64,9 +64,9 @@ directory, do:
 
 .. code-block:: sh
 
-   $ wget https://github.com/libgit2/libgit2/archive/v0.24.1.tar.gz
-   $ tar xzf v0.24.1.tar.gz
-   $ cd libgit2-0.24.1/
+   $ wget https://github.com/libgit2/libgit2/archive/v0.24.2.tar.gz
+   $ tar xzf v0.24.2.tar.gz
+   $ cd libgit2-0.24.2/
    $ cmake .
    $ make
    $ sudo make install
diff --git a/pygit2/_build.py b/pygit2/_build.py
index c9a0b9c..2ef2b4c 100644
--- a/pygit2/_build.py
+++ b/pygit2/_build.py
@@ -37,7 +37,7 @@ from os import getenv
 #
 # The version number of pygit2
 #
-__version__ = '0.24.1'
+__version__ = '0.24.2'
 
 
 #