разница в возвращаемом объекте FetchInfo от gitPython, когда есть что-то, что можно извлечь / извлечь, когда нет? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь оценить, были ли какие-либо изменения в удаленном репозитории, которые мне может потребоваться извлечь перед определенным фрагментом кода.

Я делаю это, выбирая объект FetchInfo через fetch() к удаленному источнику:

>>> import git
>>> my_repo = git.Repo.init(my_dir)
>>> repo_fetch = my_repo.remotes.origin.fetch()[0]
>>> repo_fetch
<git.remote.FetchInfo object at 0x10192c650>

Однако я не смог ясно увидеть в документации , в чем разница между тем, когда есть вещи для извлечения / извлечения и когда нет.

Я знаю, pull() выводит переменную str, содержащую Already up to date., когда локальное репо обновлено, но я не хочу тянуть, я просто хочу получить.

Я вижу некоторые различия в его атрибутах, когда я знаю, что в удаленном репо нет изменений:

>>> repo_fetch.ref 
<git.RemoteReference "refs/remotes/origin/master">
>>> repo_fetch.flags
4
>>> repo_fetch.note
''
>>> repo_fetch.old_commit
>>> repo_fetch.remote_ref_path
'master    '

и когда есть изменения:

>>> repo_fetch.ref 
<git.RemoteReference "refs/remotes/origin/master">
>>> repo_fetch.flags
64
>>> repo_fetch.note
''
>>> repo_fetch.old_commit
<git.Commit "[some_string]">
>>> repo_fetch.remote_ref_path
' '

1 Ответ

0 голосов
/ 28 апреля 2020

Ключ является атрибутом flags, который не очень интуитивно или четко представлен в документации :

ERROR = 128
FAST_FORWARD = 64
FORCED_UPDATE = 32
HEAD_UPTODATE = 4
NEW_HEAD = 2
NEW_TAG = 1
REJECTED = 16
TAG_UPDATE = 8

Для целей вопроса, пока флаги не равно 4 (HEAD_UPTODATE), мне нужно действовать не так, как если бы локальные и удаленные репозитории были одинаковыми.

...