-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathclone_all.sh
More file actions
84 lines (72 loc) · 2.04 KB
/
Copy pathclone_all.sh
File metadata and controls
84 lines (72 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash
#########################################
# Usage:
# Normal mode (stops on first error)
# ./clone_all.sh
# Force mode (continues despite errors)
# ./clone_all.sh -f
#########################################
# Student GH username list - one per newline
LIST_FILE="student_gh_usernames.txt"
ORGANIZATION="UWSEDS"
HOMEWORK_NAME="homework-0-"
# Parse command-line arguments
FORCE=false
while getopts "f" opt; do
case $opt in
f)
FORCE=true
;;
\?)
echo "Usage: $0 [-f]" >&2
echo " -f: Force mode - continue on errors" >&2
exit 1
;;
esac
done
# Initialize counters and arrays
success_count=0
failed_users=()
# Read file line by line
while IFS= read -r name || [ -n "$name" ]; do
# Trim whitespace
name=$(echo "$name" | xargs)
# Skip empty lines
if [ -z "$name" ]; then
continue
fi
repo_url="git@github.com:${ORGANIZATION}/${HOMEWORK_NAME}${name}.git"
# Attempt to clone
if git clone "$repo_url" 2>&1; then
echo ""
((success_count++))
else
failed_users+=("$name")
if [ "$FORCE" = false ]; then
echo "Failed to clone repository for $name" >&2
echo "Stopping due to error. Use -f flag to continue on errors." >&2
exit 1
fi
echo "Continuing despite error (force mode enabled)..."
fi
echo ""
done < "$LIST_FILE"
echo "Done processing all entries."
# Print summary if in force mode
if [ "$FORCE" = true ]; then
echo "=========================================="
echo "SUMMARY"
echo "=========================================="
echo "Successful clones: $success_count"
if [ ${#failed_users[@]} -eq 0 ]; then
echo "Failed clones: 0"
else
echo "Failed clones: ${#failed_users[@]}"
echo ""
echo "Failed usernames:"
for user in "${failed_users[@]}"; do
echo " - $user"
done
fi
echo "=========================================="
fi