Repository navigation
repo.remote().fetch("--dry-run") can produce assertion failure #442
Description
Activity
Which version of GitPython are you using ?
What is the remote that you are trying to pull ?In case you are not using the latest version from pypi, please try again with that one.
ThanksI'm using GitPython-2.0.3. That's the latest, right?
C:\Users\s2sajs\Documents\GitHub\Reactive.jl>git config --get remote.origin.url https://github.com/JuliaLang/Reactive.jl.git C:\Users\s2sajs\Documents\GitHub\Reactive.jl>git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean C:\Users\s2sajs\Documents\GitHub\Reactive.jl>git fetch --dry-run From https://github.com/JuliaLang/Reactive.jl 4d4417f..0c032a3 master -> origin/masterI was unable to reproduce it. Here is what I tried:
import git r = git.Repo.clone_from('https://github.com/JuliaLang/Reactive.jl', 'here') r.remote().fetch() r.remote().fetch('--dry-run')
Does this work for you ? Maybe there is more to it, like the git version installed on the system.
$ git --version git version 2.7.4 (Apple Git-66)
C:\Users\s2sajs\Documents\GitHub\Reactive.jl>git --version git version 1.9.5.msysgit.0The behavior is dependent on the condition of the working copy. If I try the fetch in a freshly cloned working copy, it works just fine.
This is what I get when running the command git-python runs from the terminal:
$ git fetch -v origin From https://github.com/JuliaLang/Reactive.jl = [up to date] master -> origin/master = [up to date] cjh/cleanup -> origin/cjh/cleanup = [up to date] gh-pages -> origin/gh-pages = [up to date] next -> origin/next = [up to date] teh/imageview_warmups -> origin/teh/imageview_warmups
Could you run that on your end ?
C:\Users\s2sajs\Documents\GitHub\Reactive.jl>git fetch -v origin From https://github.com/JuliaLang/Reactive.jl 4d4417f..0c032a3 master -> origin/master = [up to date] cjh/cleanup -> origin/cjh/cleanup = [up to date] gh-pages -> origin/gh-pages = [up to date] next -> origin/next = [up to date] teh/imageview_warmups -> origin/teh/imageview_warmupsI still can't reproduce it - even when manipulating my local repository to update the remote master:
➜ here git:(master) git fetch -v origin --dry-run From https://github.com/JuliaLang/Reactive.jl 7a3e5e9..0c032a3 master -> origin/master = [up to date] cjh/cleanup -> origin/cjh/cleanup = [up to date] gh-pages -> origin/gh-pages = [up to date] next -> origin/next = [up to date] teh/imageview_warmups -> origin/teh/imageview_warmups
Maybe it's related to the git version somehow, or to windows. In any case, what you could do is to have a look at the line that throws the assertion, and add some debug-printing yourself. That way you can find out which line it fails to handle correctly. I am not sure what else I can do here, unfortunately.
Personally I'd think it does not matter whether or not you use
--dry-runeither, as the output should be exactly the same.Thanks for trying. In case it helps anyone,
fetch_info_linesis[u' 4d4417f..0c032a3 master -> origin/master\n', u' = [up to date] cjh/cleanup -> origin/cjh/cleanup\n', u' = [up to date] gh-pages -> origin/gh-pages\n', u' = [up to date] next -> origin/next\n', u' = [up to date] teh/imageview_warmups -> origin/teh/imageview_warmups\n']and
fetch_head_infois[u"4d4417fd437dd5e11c5c00c0c38e2920f42d1ab5\t\tbranch 'master' of https://github.com/JuliaLang/Reactive.jl\n", u"dd4b19f52781ab9b6369b850e5c497b0709daefe\tnot-for-merge\tbranch 'cjh/cleanup' of https://github.com/JuliaLang/Reactive.jl\n", u"7fbea37f4fcc20eaf34402de89d7a247be9368cb\tnot-for-merge\tbranch 'gh-pages' of https://github.com/JuliaLang/Reactive.jl\n", u"9c5d5d1dc7d30e8eed6deedc9f44493573e5c968\tnot-for-merge\tbranch 'next' of https://github.com/JuliaLang/Reactive.jl\n", u"6241b420ac9ae36f7bac4142b9f241970eea2539\tnot-for-merge\tbranch 'teh/imageview_warmups' of https://github.com/JuliaLang/Reactive.jl\n", u"d7a2bd36ead56cf1e0bdad6b04af9e6a1803860b\tnot-for-merge\tbranch 'teh/throttle_typ' of https://github.com/JuliaLang/Reactive.jl\n"]That demonstrates that
l_fil < l_fhi.
The problem, apparently, is thatteh/throttle_typis infetch_head_infobut not infetch_info_lines.Indeed ! This assertion was the cause for many issues in the past, and so far there was no good fix for it. This is the comment at the respective line:
# NOTE: We assume to fetch at least enough progress lines to allow matching each fetch head line with it.The problem is that I never understood why git would sometimes do that, or what the correct behaviour is. Should GitPython provide only partial information, or should it simply ignore the partial data ?
Currently it matches the lines one on one, maybe it's safe to just ignore extra lines in the fetch head info ... and get rid of this issue once and for all.
Yes, my inclination would be to ignore extra lines in the fetch head info.
Did you get that backwards? Don't you want to ignore extra lines in
fetch_head_info, not extra lines infetch_info_lines?Thanks for the review ! I totally did - fix is on the way.
- added a commit that references this issue
on May 25, 2016 - added a commit that references this issue
on Jan 24, 2026