-
Notifications
You must be signed in to change notification settings - Fork 0
/
gitflux-action
135 lines (97 loc) · 3.6 KB
/
gitflux-action
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/usr/bin/env bash
create_branch_from_base() {
local branch="$1"
local base_branch="$2"
validate_git_clean_working_tree
validate_git_local_and_remote_branches_exist "$base_branch"
git_v_checkout "$base_branch"
git_v_pull
git_v_ensure_branch "$branch"
# save the base to config for the 'finish' command
git_config_set "$(git_config_escape_subsection "branch:$branch").base" "$base_branch"
}
create_branch_from_tag() {
local branch="$1"
local tag="$2"
validate_git_clean_working_tree
# fetch remote tag refs
git_v_checkout "master"
git_v_pull
validate_git_tag_exists "$tag"
git_v_checkout "$tag"
git_v_ensure_branch "$branch"
# save the base to config for the 'finish' command
git_config_set "$(git_config_escape_subsection "branch:$branch").base" "$tag"
}
destroy_branch_from_base() {
local branch="$1"
local base_branch
base_branch="$(git_config_get "$(git_config_escape_subsection "branch:$branch").base")"
base_branch="${base_branch:-master}"
# early exit: avoid redundant executions, and protect unsafe removal of git-config sections later
validate_git_local_or_remote_branch_exists "$branch"
io_confirm "local and remote branches will be deleted, forever! continue?" "i knew you'd chicken out."
io_log
validate_git_clean_working_tree
validate_git_local_branch_exists "$base_branch"
git_v_checkout "$base_branch"
git_v_ensure_no_branch "$branch"
# delete the base from config, we're not gonna need it anymore
git_config_remove_section "$(git_config_escape_subsection "branch:$branch")"
}
review_branch_from_base() {
local branch="$1"
local base_override="$2"
local base_default
local base_branch
base_default="$(git_config_get "$(git_config_escape_subsection "branch:$branch").base")"
base_branch=${base_override:-$base_default}
validate_git_clean_working_tree
validate_git_local_and_remote_branches_exist "$branch"
validate_git_local_and_remote_branches_exist "$base_branch"
hub_ensure_authenticated
hub_v_create_pull_request "$branch" "$base_branch"
}
destroy_branch_from_tag() {
local branch="$1"
local tag
tag="$(git_config_get "$(git_config_escape_subsection "branch:$branch").base")"
tag="${tag:-master}"
# early exit: avoid redundant executions, and protect unsafe removal of git-config sections later
validate_git_local_or_remote_branch_exists "$branch"
io_confirm "local and remote branches will be deleted, forever! continue?" "i knew you'd chicken out."
io_log
validate_git_clean_working_tree
validate_git_tag_exists "$tag"
git_v_checkout "$tag"
git_v_ensure_no_branch "$branch"
# delete the base from config, we're not gonna need it anymore
git_config_remove_section "$(git_config_escape_subsection "branch:$branch")"
}
sync_branch_with_base() {
local branch="$1"
local base_override="$2"
local base_default
local base_branch
base_default="$(git_config_get "$(git_config_escape_subsection "branch:$branch").base")"
base_branch=${base_override:-$base_default}
validate_git_clean_working_tree
validate_git_local_and_remote_branches_exist "$branch"
validate_git_local_and_remote_branches_exist "$base_branch"
git_v_ensure_merged "$branch" "$base_branch"
}
self_update() {
local tag="$1"
local temp_dir
local ref
local setup_path
temp_dir="$(create_temp_dir)"
cleanup_dir_on_exit "$temp_dir"
ref="${tag:-master}"
setup_path="$temp_dir"'/setup.sh'
hub_v_get_self_raw_content "$ref" 'bin/setup.sh' "$setup_path"
set_executable "$setup_path"
io_log "running the setup script with the 'update' command..."
env REPO_REF="$ref" "$setup_path" update >/dev/null 2>&1 # todo - redirect to log file
io_status_logger $? "updated ok ($ref)" "update failed"
}