Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 37 additions & 9 deletions src/fosslight_util/download.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,41 @@
import fosslight_util.constant as constant
from fosslight_util.set_log import init_log
import signal
import time
import threading
import platform

logger = logging.getLogger(constant.LOGGER_NAME)
compression_extension = {".tar.bz2", ".tar.gz", ".tar.xz", ".tgz", ".tar", ".zip", ".jar", ".bz2"}
SIGNAL_TIMEOUT = 600


class Alarm(threading.Thread):
def __init__(self, timeout):
threading.Thread.__init__(self)
self.timeout = timeout
self.setDaemon(True)

def run(self):
time.sleep(self.timeout)
logger.error("download timeout! (%d sec)", SIGNAL_TIMEOUT)
os._exit(1)


class TimeOutException(Exception):
pass


def alarm_handler(signum, frame):
logger.warning("git clone timeout! (%d sec)", SIGNAL_TIMEOUT)
logger.warning("download timeout! (%d sec)", SIGNAL_TIMEOUT)
raise TimeOutException()


def print_help_msg():
print("* Required : -s link_to_download")
print("* Optional : -t target_directory")
print("* Optional : -d log_file_directory")
sys.exit()
sys.exit(0)


def main():
Expand Down Expand Up @@ -121,14 +136,21 @@ def get_ref_to_checkout(checkout_to, ref_list):


def download_git_clone(git_url, target_dir, checkout_to=""):
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(SIGNAL_TIMEOUT)
if platform.system() != "Windows":
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(SIGNAL_TIMEOUT)
else:
alarm = Alarm(SIGNAL_TIMEOUT)
alarm.start()
try:
Path(target_dir).mkdir(parents=True, exist_ok=True)
repo = git.clone_repository(git_url, target_dir,
bare=False, repository=None,
remote=None, callbacks=None)
signal.alarm(0)
if platform.system() == "Windows":
signal.alarm(0)
else:
del alarm
except Exception as error:
logger.warning("git clone - failed:"+str(error))
return False
Expand All @@ -148,9 +170,12 @@ def download_git_clone(git_url, target_dir, checkout_to=""):
def download_wget(link, target_dir, compressed_only):
success = False
downloaded_file = ""

signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(SIGNAL_TIMEOUT)
if platform.system() == "Windows":
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(SIGNAL_TIMEOUT)
else:
alarm = Alarm(SIGNAL_TIMEOUT)
alarm.start()
try:
Path(target_dir).mkdir(parents=True, exist_ok=True)

Expand All @@ -171,7 +196,10 @@ def download_wget(link, target_dir, compressed_only):

logger.info("wget:"+link)
downloaded_file = wget.download(link)
signal.alarm(0)
if platform.system() == "Windows":
signal.alarm(0)
else:
del alarm

shutil.move(downloaded_file, target_dir)
downloaded_file = os.path.join(target_dir, downloaded_file)
Expand Down
2 changes: 1 addition & 1 deletion src/fosslight_util/help.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
| |
____| |
|_______|
"""
"""


class PrintHelpMsg():
Expand Down