forked from jarcec/cmd-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdate-all-repos
executable file
·90 lines (80 loc) · 2.32 KB
/
update-all-repos
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
#!/bin/bash
#
# Copyright 2013 Jarek Jarcec Cecho <jarcec@apache.org>
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This script will update all repositories under current working directory.
#
# For example, if you have following directory structure:
#
# dir/
# dir/svn_repo
# dir/git_repo
# dir/normal_file
# dir/normal_directory
#
# Then this script will call 'svn up' for the svn_repo directory and 'git fetch'
# for all configured remotes for the 'git_repo' directory. File normal_file and
# directory normal_directory are left untouched.
#
# Script will output stdin and stdout to update-all-repos.[log|err] file.
# Current working directory
master_root=`pwd`
echo "Working from directory $master_root"
# Log files
LOG=$master_root/update-all-repos.log
ERR=$master_root/update-all-repos.err
# GIT
# Iterate over all remotes and fetch them
function handle_git {
for remote in `git remote`; do
echo -ne "\tgit fetch $remote..."
git fetch $remote >> $LOG 2>> $ERR
if [[ $? -eq 0 ]]; then
echo "SUCCESS"
else
echo "FAILURE"
fi
done
}
# SVN
# Not much, just do update
function handle_svn {
echo -ne "\tsvn up..."
svn up >> $LOG 2>> $ERR
if [[ $? -eq 0 ]]; then
echo "SUCCESS"
else
echo "FAILURE"
fi
}
# Iterate over all directories under current one
for dir in `ls`; do
cd $master_root
if [[ -d $dir/.git ]]; then
cd $dir
echo "Detected git repository in $dir"
handle_git
elif [[ -d $dir/.svn ]]; then
cd $dir
echo "Detected svn repository in $dir"
handle_svn
else
echo "Unknown repository in $dir, skipping"
fi
done