Skip to content

Commit

Permalink
PASS-18: Retry git pulls on exceptions (#93)
Browse files Browse the repository at this point in the history
PASS-18: Retry git pulls

---------

Co-authored-by: Emma Doyle <[email protected]>
  • Loading branch information
emmeowzing and Emma Doyle authored Feb 14, 2024
1 parent 70d3d40 commit 984b061
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 49 deletions.
46 changes: 18 additions & 28 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 0 additions & 10 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -396,33 +396,25 @@ python-json-logger==2.0.7 ; python_version >= "3.10" and python_version < "4.0"
--hash=sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c \
--hash=sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd
pyyaml==6.0.1 ; python_version >= "3.10" and python_version < "4.0" \
--hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \
--hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \
--hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \
--hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \
--hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \
--hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \
--hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \
--hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \
--hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \
--hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \
--hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \
--hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \
--hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \
--hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \
--hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \
--hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \
--hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \
--hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \
--hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \
--hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \
--hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \
--hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \
--hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \
--hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \
--hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \
--hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \
--hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \
--hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \
--hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \
--hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \
Expand All @@ -437,9 +429,7 @@ pyyaml==6.0.1 ; python_version >= "3.10" and python_version < "4.0" \
--hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \
--hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \
--hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \
--hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \
--hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \
--hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \
--hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \
--hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \
--hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \
Expand Down
32 changes: 22 additions & 10 deletions src/operator/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@


from git import Repo
from git.exc import CommandError
from time import sleep
from src.operator import env

import logging
import sys


log = logging.getLogger(__name__)
Expand All @@ -32,20 +34,30 @@ def clone() -> None:
log.info(f'Successfully cloned repo {env["PASS_GIT_URL"]} to password store {env["PASS_DIRECTORY"]}')


def pull(daemon: bool =False) -> None:
def pull(daemon: bool =False, retry: bool =False) -> None:
"""
Blocking function that optionally runs 'git pull' in the cloned repository, repeatedly.
Blocking function that optionally runs 'git pull' in the cloned repository, repeatedly. This said, the
default behavior is to retry indefinitely until a 'git pull' succeeds.
Args:
daemon (bool): whether or not to loop on the user-specified OPERATOR_INTERVAL (default: False).
daemon (bool): whether or not to loop on the user-specified OPERATOR_INTERVAL. (default: False)
retry (bool): whether or not to retry the git pull indefinitely until it succeeds. (default: False)
"""
if daemon:
while True:
tries = 0

while daemon or retry:
# Try to pull from the repository. If successful and daemon is not set, break from the loop.
# Otherwise, continue to try to pull from the repository on an interval.
try:
log.info(f'Updating local password store at "{env["PASS_DIRECTORY"]}"')
repo = Repo(env['PASS_DIRECTORY'])
repo.remotes.origin.pull()
sleep(float(env['OPERATOR_INTERVAL']))
else:
log.info(f'Updating local password store at "{env["PASS_DIRECTORY"]}"')
repo = Repo(env['PASS_DIRECTORY'])
repo.remotes.origin.pull()
if daemon:
tries = 0
sleep(float(env['OPERATOR_INTERVAL']))
except CommandError as e:
log.error(f'Retry {tries} git pull: {e}')
tries += 1

if not daemon:
break
3 changes: 2 additions & 1 deletion src/operator/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"""


from __future__ import annotations
from enum import Enum

import logging
Expand All @@ -26,7 +27,7 @@ def __str__(self):
return self.name

@classmethod
def from_string(cls, s: str) -> 'LogLevel':
def from_string(cls, s: str) -> LogLevel:
"""
Convert a string to the enum value.
Expand Down

0 comments on commit 984b061

Please sign in to comment.