From 4ab000a0220cf5d5b1d7ca30bc0c441d727bfdfa Mon Sep 17 00:00:00 2001 From: dannc Date: Fri, 8 Apr 2022 10:46:48 +0700 Subject: [PATCH] homework 4.2: add question 3 --- src/homework/04-script/4.2/q3.py | 39 +++++++++++++++++++++++ src/homework/04-script/4.2/readme.md | 47 ++++++++++++++++++++++++++-- 2 files changed, 84 insertions(+), 2 deletions(-) create mode 100755 src/homework/04-script/4.2/q3.py diff --git a/src/homework/04-script/4.2/q3.py b/src/homework/04-script/4.2/q3.py new file mode 100755 index 0000000..4701197 --- /dev/null +++ b/src/homework/04-script/4.2/q3.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +import os +import subprocess +import sys + +repo_path = sys.argv[1] + +if repo_path == '': + print('необходимо указать путь до локального репозитория') + exit(1) + +# запускаем под-процесс в рабочей директории (cwd) +top_level_command = subprocess.Popen( + ['git rev-parse --show-toplevel'], + cwd=repo_path, + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE +) + +# ожидаем выполнение под-процесса +top_level_command.wait() +if top_level_command.returncode != 0: + print('директория {} не является git-репозиторием'.format(repo_path)) + exit(1) + +# на выходе у read() идёт последовательность байт, которые необходимо декодировать в строку +top_level_path = top_level_command.stdout.read().decode("utf-8").rstrip() + +bash_command = ['cd ' + top_level_path, "git status"] + +result_os = os.popen(' && '.join(bash_command)).read() + +for result in result_os.split('\n'): + if result.find('modified') != -1: + prepare_result = result.replace('\tmodified: ', '') + full_path = top_level_path + '/' + prepare_result + print(full_path) diff --git a/src/homework/04-script/4.2/readme.md b/src/homework/04-script/4.2/readme.md index c72415e..731fa0c 100644 --- a/src/homework/04-script/4.2/readme.md +++ b/src/homework/04-script/4.2/readme.md @@ -75,13 +75,56 @@ _note_: при запуске скрипта изменил путь до реп 1. Доработать скрипт выше так, чтобы он мог проверять не только локальный репозиторий в текущей директории, а также умел воспринимать путь к репозиторию, который мы передаём как входной параметр. Мы точно знаем, что начальство коварное и будет проверять работу этого скрипта в директориях, которые не являются локальными репозиториями. #### Ваш скрипт: + +[script](./q3.py) + ```python -??? +#!/usr/bin/env python3 + +import os +import subprocess +import sys + +repo_path = sys.argv[1] + +if repo_path == '': + print('необходимо указать путь до локального репозитория') + exit(1) + +# запускаем под-процесс в рабочей директории (cwd) +top_level_command = subprocess.Popen( + ['git rev-parse --show-toplevel'], + cwd=repo_path, + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE +) + +# ожидаем выполнение под-процесса +top_level_command.wait() +if top_level_command.returncode != 0: + print('директория {} не является git-репозиторием'.format(repo_path)) + exit(1) + +# на выходе у read() идёт последовательность байт, которые необходимо декодировать в строку +top_level_path = top_level_command.stdout.read().decode("utf-8").rstrip() + +bash_command = ['cd ' + top_level_path, "git status"] + +result_os = os.popen(' && '.join(bash_command)).read() + +for result in result_os.split('\n'): + if result.find('modified') != -1: + prepare_result = result.replace('\tmodified: ', '') + full_path = top_level_path + '/' + prepare_result + print(full_path) + ``` #### Вывод скрипта при запуске при тестировании: ``` -??? +./q3.py ~/code/learning/netology +/home/dannc/code/learning/netology/src/homework/04-script/4.2/q3.py ``` ### Обязательная задача 4