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