Dernière activité 1749140282

Скрипт-хелпер для пакета GRASP. Клонирует bare-репозиторий.

KarelWintersky a révisé ce gist 1749140282. Aller à la révision

Aucun changement

KarelWintersky a révisé ce gist 1748865795. Aller à la révision

1 file changed, 114 insertions

grasp.sh(fichier créé)

@@ -0,0 +1,114 @@
1 + #!/usr/bin/env bash
2 +
3 + #
4 + # Grasp helper
5 + #
6 + # Используется для клонирования bare-репозиториев в каталог
7 + # имя_пользователя/имя_репозитория.
8 + #
9 + #
10 + #
11 + # Подключаем в .bashrc
12 + # if [ -f /path/to/grasp.sh ]; then
13 + # source /path/to/grasp.sh
14 + # fi
15 + #
16 + # и выполняем
17 + # source ~/.bashrc
18 + #
19 + # теперь поддерживется команда grasp clone или вызов скрипта напрямую.
20 + #
21 + # (c) Karel Wintersky, 2025
22 + #
23 +
24 + # Проверка режима выполнения
25 + if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
26 + RUN_AS_SCRIPT=true
27 + else
28 + RUN_AS_SCRIPT=false
29 + fi
30 +
31 + # Цвета вывода
32 + RED='\033[1;31m'; GREEN='\033[1;32m'; YELLOW='\033[1;33m'
33 + BLUE='\033[1;34m'; CYAN='\033[1;36m'; NC='\033[0m'
34 +
35 + main() {
36 + case "$1" in
37 + "clone")
38 + [[ -z "$2" ]] && { show_error "URL не указан"; show_help; return 1; }
39 + clone_bare "$2"
40 + ;;
41 + "help"|"")
42 + show_help
43 + ;;
44 + *)
45 + show_error "Неподдерживаемая команда '${YELLOW}$1${RED}'"
46 + show_help
47 + return 1
48 + ;;
49 + esac
50 + }
51 +
52 + clone_bare() {
53 + local url="$1"
54 + local user_repo service
55 +
56 + # Определяем сервис и извлекаем user/repo
57 + case "$url" in
58 + *github*)
59 + service="GitHub"
60 + [[ "$url" =~ github.com[/:]([^/]+/[^/]+?)(\.git)?$ ]] || { show_error "Неверный URL GitHub"; return 1; }
61 + ;;
62 + *gitlab*)
63 + service="GitLab"
64 + [[ "$url" =~ gitlab.com[/:]([^/]+/[^/]+?)(\.git)?$ ]] || { show_error "Неверный URL GitLab"; return 1; }
65 + ;;
66 + *bitbucket*)
67 + service="Bitbucket"
68 + [[ "$url" =~ bitbucket.org[/:]([^/]+/[^/]+?)(\.git)?$ ]] || { show_error "Неверный URL Bitbucket"; return 1; }
69 + ;;
70 + *)
71 + show_error "Неподдерживаемый хостинг. Поддерживается: GitHub, GitLab, Bitbucket"
72 + return 1
73 + ;;
74 + esac
75 +
76 + user_repo="${BASH_REMATCH[1]}"
77 + echo -e "${GREEN}Клонируем ${CYAN}${service}${GREEN} bare-репозиторий в ${YELLOW}$user_repo${NC}..."
78 +
79 + if mkdir -p "$user_repo" && git clone --bare "$url" "$user_repo"; then
80 + echo -e "${GREEN}Успешно! Репозиторий сохранён в ${YELLOW}$user_repo${NC}"
81 + else
82 + show_error "Ошибка при клонировании"
83 + return 1
84 + fi
85 + }
86 +
87 + show_error() {
88 + echo -e "${RED}Ошибка: ${1}${NC}" >&2
89 + }
90 +
91 + show_help() {
92 + echo ""
93 + echo -e "${GREEN}GRASP Helper${NC}"
94 + echo ""
95 + echo -e " ${YELLOW}grasp clone <URL>${NC} - Клонировать как bare-репозиторий"
96 + echo -e " ${YELLOW}grasp help ${NC} - Показать справку"
97 + echo ""
98 + echo -e "${BLUE}Поддерживаемые сервисы:${NC}"
99 + echo ""
100 + echo -e " GitHub: ${CYAN}https://github.com/user/repo${NC}"
101 + echo -e " ${CYAN}git@github.com:user/repo.git${NC}"
102 + echo -e " GitLab: ${CYAN}https://gitlab.com/user/repo${NC}"
103 + echo -e " ${CYAN}git@gitlab.com:user/repo.git${NC}"
104 + echo -e " Bitbucket: ${CYAN}https://bitbucket.org/user/repo${NC}"
105 + echo -e " ${CYAN}git@bitbucket.org:user/repo.git${NC}"
106 + echo ""
107 + }
108 +
109 + # Точка входа
110 + if $RUN_AS_SCRIPT; then
111 + main "$@"
112 + else
113 + grasp() { main "$@"; }
114 + fi
Plus récent Plus ancien