Continued:
[jprojects-scripts.git] / fix-project-remotes.sh
1 #!/bin/bash
2
3 . ./.jprojects.sh || exit 255
4
5 UNWANTED_NAME="stick"
6 WANTED_NAME1="upstream"
7 WANTED_NAME2="daedalus"
8 WANTED_NAME3="transport"
9 WANTED_NAME4="backup2"
10
11 GIT_USER="quix0r"
12 GIT_SERVER="git.mxchange.org"
13 GIT_PATH="/var/cache/git/repos"
14 GIT_BRANCH="master"
15 GIT_ORIGIN="origin"
16
17 MEDIA_BASE="/media"
18 MEDIA_NAME1="Backup"
19 MEDIA_NAME2="Transport"
20 MEDIA_NAME3="Backup"
21 MEDIA_PATH="Java Project"
22
23 for project in ${LIST}; do
24         if [ "${project}" = "jprojects-scripts" ]
25         then
26                 echo "$0: Skipping jprojects-scripts ..."
27                 continue
28         elif [ ! -d "${JPROJECTS_HOME}/${project}" ]
29         then
30                 echo "$0: Project '${project}' does not exist."
31                 continue
32         fi
33
34         echo "$0: project='${project}'"
35         cd "${JPROJECTS_HOME}/${project}" || exit 255
36
37         GIT_URL1="${GIT_USER}@${GIT_SERVER}:${GIT_PATH}/${project}.git"
38         GIT_URL2="${GIT_PATH}/${project}.git"
39         GIT_URL3="${MEDIA_BASE}/${USER}/${MEDIA_NAME2}/${MEDIA_PATH}/${project}.git"
40         GIT_URL4="file:///E:/Java%20Project/${project}.git"
41         GIT_URL5="E:/Java Project/${project}.git"
42         GIT_URL6="${MEDIA_BASE}/${USER}/${MEDIA_NAME1}/${MEDIA_PATH}/${project}.git"
43         GIT_URL7="${MEDIA_BASE}/${USER}/${MEDIA_NAME3}/${MEDIA_PATH}/${project}.git"
44         echo "$0: GIT_URL1='${GIT_URL1}'"
45         echo "$0: GIT_URL2='${GIT_URL2}'"
46         echo "$0: GIT_URL3='${GIT_URL3}'"
47         echo "$0: GIT_URL4='${GIT_URL4}'"
48         echo "$0: GIT_URL5='${GIT_URL5}'"
49         echo "$0: GIT_URL6='${GIT_URL6}'"
50         echo "$0: GIT_URL7='${GIT_URL7}'"
51
52         if [ "$1" = "l" ]
53         then
54                 echo "$0: Listing remotes for '${project}' ..."
55                 git remote -v
56                 continue
57         fi
58
59         REMOTES=$(git remote | wc -l)
60         echo "$0: REMOTES='${REMOTES}'"
61
62         if [ "${REMOTES}" = "0" ]
63         then
64                 if [ -n "${SHELL}" -a -f "/proc/version" ]
65                 then
66                         echo "$0: Found no repositories in '${project}'. Creating all (Linux) ..."
67                         git remote add "${GIT_ORIGIN}" "${GIT_URL6}" --track "${GIT_BRANCH}"
68                         git remote add "${WANTED_NAME1}" "${GIT_URL1}"
69                         git remote add "${WANTED_NAME2}" "${GIT_URL2}"
70                         git remote add "${WANTED_NAME3}" "${GIT_URL3}"
71                         git remote add "${WANTED_NAME4}" "${GIT_URL4}"
72                 else
73                         echo "$0: Don't know how to create repositories, maybe unsupported."
74                         exit 1
75                 fi
76         elif [ "${REMOTES}" = "1" ]
77         then
78                 echo "$0: Only one remote found for '${project}'"
79
80                 REMOTE=$(git remote)
81                 REMOTE_PUSH=$(git remote -v | grep "push")
82                 echo "$0: REMOTE='${REMOTE}',REMOTE_PUSH='${REMOTE_PUSH}'"
83
84                 MEDIA1=$(echo "${REMOTE_PUSH}" | grep "${MEDIA_BASE}/${USER}/${MEDIA_NAME1}/")
85                 echo "$0: MEDIA1='${MEDIA1}'"
86
87                 if [ -n "${MEDIA1}" ]
88                 then
89                         echo "$0: Found '${MEDIA_BASE}/${USER}/${MEDIA_NAME1}' remote for '${project}'."
90                         if [ "${REMOTE}" = "${GIT_ORIGIN}" ]
91                         then
92                                 echo "$0: Project '${project}' has already fixed '${GIT_ORIGIN}'."
93                         else
94                                 echo "$0: Renaming '${REMOTE}' to '${GIT_ORIGIN}' ..."
95                                 git remote rename "${REMOTE}" "${GIT_ORIGIN}" || exit 255
96                         fi
97                 else
98                         echo "$0: Not a media remote."
99                         MXCHANGE_REMOTE=$(echo "${REMOTE_PUSH}" | grep "${GIT_URL1}")
100                         LINUX_MEDIA_PATH_REMOTE=$(echo "${REMOTE_PUSH}" | grep "${GIT_URL3}")
101                         WINDOWS_FILE_REMOTE=$(echo "${REMOTE_PUSH}" | grep "${GIT_URL4}")
102                         WINDOWS_PATH_REMOTE=$(echo "${REMOTE_PUSH}" | grep "${GIT_URL5}")
103                         echo "$0: MXCHANGE_REMOTE='${MXCHANGE_REMOTE}',WINDOWS_FILE_REMOTE='${WINDOWS_FILE_REMOTE}',WINDOWS_PATH_REMOTE='${WINDOWS_PATH_REMOTE}',LINUX_MEDIA_PATH_REMOTE='${LINUX_MEDIA_PATH_REMOTE}'"
104
105                         if [ -n "${MXCHANGE_REMOTE}" ]
106                         then
107                                 echo "$0: Found a '${GIT_SERVER}' remote."
108
109                                 if [ -n "${WANTED_NAME1}" -a "${REMOTE}" != "${WANTED_NAME1}" ]
110                                 then
111                                         echo "$0: Project '${project}' has one correct '${WANTED_NAME1}'."
112                                 else
113                                         echo "$0: Renaming '${REMOTE}' to '${WANTED_NAME1}' ..."
114                                         git remote rename "${REMOTE}" "${WANTED_NAME1}" || exit 255
115                                 fi
116
117                                 echo "$0: Adding '${GIT_ORIGIN}' to '${project}' ..."
118                                 git remote add "${GIT_ORIGIN}" "${MEDIA_BASE}/${USER}/${MEDIA_NAME1}/${MEDIA_PATH}/${project}.git" --track "${GIT_BRANCH}" || exit 255
119                         elif [ -n "${WINDOWS_FILE_REMOTE}" -o -n "${WINDOWS_PATH_REMOTE}" ]
120                         then
121                                 echo "$0: Found a Windows (USB stick) remote."
122
123                                 if [ -n "${WANTED_NAME3}" -a "${REMOTE}" == "${WANTED_NAME3}" ]
124                                 then
125                                         echo "$0: Project '${project}' has one correct '${WANTED_NAME3}'."
126                                 else
127                                         echo "$0: Renaming '${REMOTE}' to '${WANTED_NAME3}' ..."
128                                         git remote rename "${REMOTE}" "${WANTED_NAME3}" || exit 255
129                                 fi
130
131                                 echo "$0: Adding '${GIT_ORIGIN}' to '${project}' ..."
132                                 git remote add "${GIT_ORIGIN}" "${GIT_URL1}" --track "${GIT_BRANCH}" || exit 255
133                         elif [ -n "${LINUX_MEDIA_PATH_REMOTE}" ]
134                         then
135                                 echo "$0: Found a Linux (USB stick) remote."
136
137                                 if [ -n "${GIT_ORIGIN}" -a "${REMOTE}" = "${GIT_ORIGIN}" ]
138                                 then
139                                         echo "$0: Need to fix remote repositories ..."
140                                         git remote rename origin transport || exit 255
141                                         git remote add "${GIT_ORIGIN}" "${GIT_URL6}" --track "${GIT_BRANCH}" || exit 255
142                                         git remote add "${WANTED_NAME1}" "${GIT_URL1}" --track "${GIT_BRANCH}" || exit 255
143                                         git remote add "${WANTED_NAME2}" "${GIT_URL2}" --track "${GIT_BRANCH}" || exit 255
144                                 else
145                                         echo "$0: Don't know how to fix '${REMOTE}' (${REMOTE_PUSH})."
146                                         exit 1
147                                 fi
148                         else
149                                 echo "$0: Unknown remote '${REMOTE_PUSH}' found. Exiting ..."
150                                 exit 1
151                         fi
152                 fi
153         fi
154
155         UNWANTED_REMOTE=$(git remote | grep "${UNWANTED_NAME}")
156         echo "$0: UNWANTED_REMOTE='${UNWANTED_REMOTE}'"
157
158         if [ -n "${UNWANTED_REMOTE}" ]
159         then
160                 echo "$0: Found remote '${UNWANTED_NAME}' in '${project}'. Renaming '${GIT_ORIGIN}'->'${WANTED_NAME1}' and '${UNWANTED_NAME}'->'${GIT_ORIGIN}' ..."
161
162                 UPSTREAM_REMOTE=$(git remote | grep "${WANTED_NAME1}")
163                 echo "$0: UPSTREAM_REMOTE='${UPSTREAM_REMOTE}'"
164
165                 if [ -n "${UPSTREAM_REMOTE}" ]
166                 then
167                         echo "$0: Remotes '${UNWANTED_NAME}' and '${WANTED_NAME1}' exist! Removing '${WANTED_NAME1}' ..."
168                         git remote rm "${WANTED_NAME1}" || exit 255
169                 fi
170
171                 git remote rename "${GIT_ORIGIN}" "${WANTED_NAME1}" || exit 255
172                 git remote rename "${UNWANTED_NAME}" "${GIT_ORIGIN}" || exit 255
173         else
174                 echo "$0: No unwanted '${UNWANTED_NAME}' remote in '${project}' ..."
175                 UPSTREAM_REMOTE1=$(git remote | grep "${WANTED_NAME1}")
176                 UPSTREAM_REMOTE2=$(git remote | grep "${WANTED_NAME2}")
177                 UPSTREAM_REMOTE3=$(git remote | grep "${WANTED_NAME3}")
178                 UPSTREAM_REMOTE4=$(git remote | grep "${WANTED_NAME4}")
179                 echo "$0: UPSTREAM_REMOTE1='${UPSTREAM_REMOTE1}',UPSTREAM_REMOTE2='${UPSTREAM_REMOTE2}',UPSTREAM_REMOTE3='${UPSTREAM_REMOTE3},UPSTREAM_REMOTE4='${UPSTREAM_REMOTE4}'"
180
181                 if [ -n "${UPSTREAM_REMOTE1}" ]
182                 then
183                         echo "$0: Wanted remote '${WANTED_NAME1}' already found in '${project}'."
184                 else
185                         echo "$0: No wanted '${WANTED_NAME1}' in '${project}'. Adding ..."
186                         git remote add "${WANTED_NAME1}" "${GIT_URL1}" --track "${GIT_BRANCH}" || exit 255
187                 fi
188
189                 if [ -n "${UPSTREAM_REMOTE2}" ]
190                 then
191                         echo "$0: Remote '${WANTED_NAME2}' found in '${project}'."
192                 elif [ ! -d "${GIT_URL2}" ]
193                 then
194                         echo "$0: Remote '${WANTED_NAME2}' cannot be created, path '${GIT_URL2}' missing."
195                 elif [ -n "${WANTED_NAME2}" ]
196                 then
197                         echo "$0: No wanted '${WANTED_NAME2}' in '${project}'. Adding ..."
198                         git remote add "${WANTED_NAME2}" "${GIT_URL2}" --track "${GIT_BRANCH}" || exit 255
199                 fi
200
201                 if [ -n "${UPSTREAM_REMOTE3}" ]
202                 then
203                         echo "$0: Remote '${WANTED_NAME3}' found in '${project}'."
204                 elif [ ! -d "${GIT_URL3}" ]
205                 then
206                         echo "$0: Remote '${WANTED_NAME3}' cannot be created, path '${GIT_URL3}' missing."
207                 else
208                         echo "$0: No wanted '${WANTED_NAME3}' in '${project}'. Adding ..."
209                         git remote add "${WANTED_NAME3}" "${GIT_URL3}" --track "${GIT_BRANCH}" || exit 255
210                 fi
211
212                 if [ -n "${UPSTREAM_REMOTE4}" ]
213                 then
214                         echo "$0: Remote '${WANTED_NAME4}' found in '${project}'."
215                 elif [ ! -d "${GIT_URL4}" ]
216                 then
217                         echo "$0: Remote '${WANTED_NAME4}' cannot be created, path '${GIT_URL4}' missing."
218                 else
219                         echo "$0: No wanted '${WANTED_NAME4}' in '${project}'. Adding ..."
220                         git remote add "${WANTED_NAME4}" "${GIT_URL4}" --track "${GIT_BRANCH}" || exit 255
221                 fi
222         fi
223
224         echo "$0: Setting upstream to '${GIT_ORIGIN}/${GIT_BRANCH}' ..."
225         git branch --set-upstream-to "${GIT_ORIGIN}/${GIT_BRANCH}"
226
227         # Is not an application by default
228         IS_APP=""
229
230         # Now "walk" through all base application names
231         for APP_NAME in ${BASE_APPLICATION_NAMES}; do
232                 echo "$0: project='${project}',APP_NAME='${APP_NAME}'"
233
234                 # Is it part of the project's name?
235                 PART=$(echo "${project}" | grep "${APP_NAME}")
236
237                 # Check it
238                 if [ -z "${PART}" ]
239                 then
240                         # Skip this entire loop
241                         continue
242                 fi
243
244                 # Found one that maybe needs fixing
245                 IS_APP="${APP_NAME}"
246
247                 # Skip further search
248                 break
249         done
250
251         echo "$0: IS_APP='${IS_APP}'"
252
253         # Is the current project an application (or part of it)?
254         if [ -z "${IS_APP}" ]
255         then
256                 # No, then skip it
257                 echo "$0: Project '${project}' is no application."
258                 continue
259         fi
260
261         # Generate all sub-project names
262         EAR_APP_NAME="${IS_APP}"
263         CORE_APP_NAME="${IS_APP}-core"
264         EJB_APP_NAME="${IS_APP}-ejb"
265         LIB_APP_NAME="${IS_APP}-lib"
266         MAILER_EJB_APP_NAME="${IS_APP}-mailer-ejb"
267         MAILER_LIB_APP_NAME="${IS_APP}-mailer-lib"
268         SWING_APP_NAME="${IS_APP}-swing"
269         WAR_APP_NAME="${IS_APP}-war"
270
271         # It is an application, then run through all projects again
272         for APP_NAME in ${BASE_APPLICATION_NAMES}; do
273                 echo "$0: project='${project}',APP_NAME='${APP_NAME}'"
274
275                 # What project do we have?
276                 if [ "${project}" = "${EAR_APP_NAME}" ]
277                 then
278                         # EAR (triangle symbol) project
279                         PROJECT_APP_NAME="${APP_NAME}"
280                         OWN_APP_NAME="${EAR_APP_NAME}"
281                 elif [ "${project}" = "${CORE_APP_NAME}" ]
282                 then
283                         # Model library project
284                         PROJECT_APP_NAME="${APP_NAME}-core"
285                         OWN_APP_NAME="${CORE_APP_NAME}"
286                 elif [ "${project}" = "${EJB_APP_NAME}" ]
287                 then
288                         # General EJB (bean symbol) project
289                         PROJECT_APP_NAME="${APP_NAME}-ejb"
290                         OWN_APP_NAME="${EJB_APP_NAME}"
291                 elif [ "${project}" = "${LIB_APP_NAME}" ]
292                 then
293                         # General remote-interface project
294                         PROJECT_APP_NAME="${APP_NAME}-lib"
295                         OWN_APP_NAME="${LIB_APP_NAME}"
296                 elif [ "${project}" = "${MAILER_EJB_APP_NAME}" ]
297                 then
298                         # Mailer EJB (bean symbol) project
299                         PROJECT_APP_NAME="${APP_NAME}-mailer-ejb"
300                         OWN_APP_NAME="${MAILER_EJB_APP_NAME}"
301                 elif [ "${project}" = "${MAILER_LIB_APP_NAME}" ]
302                 then
303                         # Mailer remote-interface project
304                         PROJECT_APP_NAME="${APP_NAME}-mailer-lib"
305                         OWN_APP_NAME="${MAILER_LIB_APP_NAME}"
306                 elif [ "${project}" = "${SWING_APP_NAME}" ]
307                 then
308                         # Swing project
309                         PROJECT_APP_NAME="${APP_NAME}-swing"
310                         OWN_APP_NAME="${SWING_APP_NAME}"
311                 elif [ "${project}" = "${WAR_APP_NAME}" ]
312                 then
313                         # WAR (globe symbol) project
314                         PROJECT_APP_NAME="${APP_NAME}-war"
315                         OWN_APP_NAME="${WAR_APP_NAME}"
316                 else
317                         # Unknown, skip this
318                         echo "$0: Project '${project}' is not supported. Please consider adding it."
319                         break
320                 fi
321
322                 # Generic ...
323                 LOCAL_APP_PATH="${JPROJECTS_HOME}/${PROJECT_APP_NAME}"
324
325                 echo "$0: LOCAL_APP_PATH='${LOCAL_APP_PATH}',PROJECT_APP_NAME='${PROJECT_APP_NAME}'"
326                 echo "$0: project='${project}',OWN_APP_NAME='${OWN_APP_NAME}'"
327
328                 # Is same project name?
329                 if [ "${OWN_APP_NAME}" != "${project}" ]
330                 then
331                         echo "$0: Not the right project: '${project}'<>'${OWN_APP_NAME}', skipping ..."
332                         continue
333                 elif [ "${project}" = "${LOCAL_APP_PATH##*/}" ]
334                 then
335                         # Skip same project
336                         echo "$0: Not local-tracking same project '${project}'='${LOCAL_APP_PATH##*/}', skipping ..."
337                         continue;
338                 elif [ ! -d "${LOCAL_APP_PATH}" ]
339                 then
340                         # Other application's name does not exist
341                         echo "$0: Application '${APP_NAME}' not found, skipping ..."
342                         continue;
343                 fi
344
345                 # Local-tracking
346                 LOCAL_TRACKING="${APP_NAME}-local"
347                 echo "$0: LOCAL_TRACKING='${LOCAL_TRACKING}'"
348
349                 # Maybe a local-tracking needs to be setup?
350                 LOCAL_TRACKING_SETUP=$(git remote | grep "${LOCAL_TRACKING}")
351
352                 if [ -n "${LOCAL_TRACKING_SETUP}" ]
353                 then
354                         echo "$0: Local-tracking from '${project}' to '${LOCAL_APP_PATH##*/}' is already setup."
355                         continue
356                 fi
357
358                 # Setup it
359                 echo "$0: Setting up local-tracking (${LOCAL_TRACKING}) from '${project}' to '${LOCAL_APP_PATH##*/}' ..."
360                 git remote add "${LOCAL_TRACKING}" "${LOCAL_APP_PATH}" || exit 255
361         done
362 done
363
364 echo "$0: All done."
365 exit 0