Я работаю над системой автоматизации документации. Часть этого требует, чтобы я проверил последние два коммита репо и проверил различия, и тогда это вызовет несколько событий, основанных на результатах. Я на Ма c, Каталина, с Python 3.7.7.
У меня есть тестовое репо на BitBucket. Я только что сделал некоторые изменения в файле readme, редактируя и фиксируя его непосредственно в BitBucket. Я вижу изменения в BitBucket:
BitBucket Repo
Если я прыгаю на Терминал, перейдите к репозиторию и проверьте статус, я получу ожидаемые результаты:
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
Мой сценарий Python продолжает возвращать предыдущий коммит. (Следует отметить, что я немного программировал, но я новичок в Python)
Вот соответствующий код:
import os, sys, git, time
from pathlib import Path
...
#get the repo
from git import Repo
thisRepo = Repo(thisRepoPath)
#fetch the repo first to make sure we capture any changes
for remote in thisRepo.remotes:
remote.fetch()
#check the diffs
getGitDiff(thisRepo, thisRepoPath)
getGitDiff
def getGitDiff(thisRepo, thisRepoPath):
printInCyan("Checking:\n" + thisRepoPath)
#give us read only access to the repo
thisRepo.config_reader()
#check to see if files have been changed in the repo and that change was a modification
print(getStatus(thisRepo, thisRepoPath))
getStatus
def getStatus(thisRepo, path):
printInRed(thisRepo.head.commit.message)
printInYellow(time.strftime("%a, %d %b %Y %H:%M", time.gmtime(thisRepo.head.commit.committed_date)))
changed = [ item.a_path for item in thisRepo.index.diff(None) ]
result = {}
if path in changed:
result['status'] = 'modified'
result['hasChange'] = True
result['item'] = changed
else:
result['status'] = 'up-to-date'
result['hasChange'] = False
result['item'] = changed
return result
Распечатка сообщения о коммите и дата подтверждения подтверждают, что он читает неправильный коммит. Я уже создал нечто похожее на настольное приложение Ma c, и столкнулся с подобной проблемой и решил ее, вызвав git fetch. Я предполагаю (надеюсь, правильно), что это аналогичная проблема, и я просто не делаю правильный или неправильный вызов. :)
Любая помощь будет оценена. (Я запускаю скрипт в Терминале).