Skip to content

Commit ed99f65

Browse files
committed
Merge pull request #17 from eipipuz/master
Hi Andre
2 parents cc6a2ff + fe79bbf commit ed99f65

File tree

2 files changed

+81
-75
lines changed

2 files changed

+81
-75
lines changed

README.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ integration scripts that I've found. I absolutely do welcome those features,
2424
but I figured I'd push this out since it works for me and is probably useful
2525
for others.
2626

27+
NB: This assumes you have passwordless svn.
28+
2729
Enjoy,
2830

2931
- Andre Pang <[email protected]>

git-svn-clone-externals

Lines changed: 79 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -8,78 +8,78 @@ toplevel_directory="$(git rev-parse --show-cdup)"
88

99
function call()
1010
{
11-
cmd="$@"
12-
echo "$cmd"
13-
eval "$cmd"
14-
return "$?"
11+
cmd="$@"
12+
echo "$cmd"
13+
eval "$cmd"
14+
return "$?"
1515
}
1616

1717
function do_clone()
1818
{
19-
test -d .git_externals || return 1
20-
module=`echo $remote_url|sed 's,\(.*\)\(/trunk\|/branch.*\|/tag.*\),\1,'`
21-
branch=`echo $remote_url|sed 's,\(.*\)\(/trunk\|/branch.*\|/tag.*\),\2,'|sed 's,^/,,'`
22-
if [[ $branch = $remote_url ]]; then
23-
branch=""
24-
fi
25-
(
26-
cd .git_externals
27-
if [ -d "$local_directory" ]; then
28-
(
29-
cd "$local_directory"
30-
call git svn fetch --all
31-
)
32-
else
33-
tags="tags"
34-
brch="branches"
35-
branchpath=$(echo $branch|cut -f1 -d/)
36-
echo $tags|grep $branchpath >/dev/null 2>&1 && tags=$branchpath
37-
echo $brch|grep $branchpath >/dev/null 2>&1 && brch=$branchpath
38-
39-
if [ "$module" = "$remote_url" ]; then
40-
# URL does not contains any trunk, branches or tags part, so we dont need
41-
# additional options for git-svn
42-
call git svn clone "$revision" "$module" "$local_directory"
43-
else
44-
call git svn clone "$revision" "$module" -T trunk -b $brch -t $tags "$local_directory"
45-
fi
46-
47-
fi
48-
(
49-
branch="$(echo ${branch}|sed 's,/$,,')"
50-
if [ -n "$branch" ]; then
51-
cd "$local_directory"
52-
call git reset --hard $branch
53-
fi
54-
)
55-
)
19+
test -d .git_externals || return 1
20+
module=`echo $remote_url|sed 's,\(.*\)\(/trunk\|/branch.*\|/tag.*\),\1,'`
21+
branch=`echo $remote_url|sed 's,\(.*\)\(/trunk\|/branch.*\|/tag.*\),\2,'|sed 's,^/,,'`
22+
if [[ $branch = $remote_url ]]; then
23+
branch=""
24+
fi
25+
(
26+
cd .git_externals
27+
if [ -d "$local_directory" ]; then
28+
(
29+
cd "$local_directory"
30+
call git svn fetch --all
31+
)
32+
else
33+
tags="tags"
34+
brch="branches"
35+
branchpath=$(echo $branch|cut -f1 -d/)
36+
echo $tags|grep $branchpath >/dev/null 2>&1 && tags=$branchpath
37+
echo $brch|grep $branchpath >/dev/null 2>&1 && brch=$branchpath
38+
39+
if [ "$module" = "$remote_url" ]; then
40+
# URL does not contains any trunk, branches or tags part, so we dont need
41+
# additional options for git-svn
42+
call git svn clone "$revision" "$module" "$local_directory"
43+
else
44+
call git svn clone "$revision" "$module" -T trunk -b $brch -t $tags "$local_directory"
45+
fi
46+
47+
fi
48+
(
49+
branch="$(echo ${branch}|sed 's,/$,,')"
50+
if [ -n "$branch" ]; then
51+
cd "$local_directory"
52+
call git reset --hard $branch
53+
fi
54+
)
55+
)
5656
}
5757

5858
function do_link()
5959
{
60-
dir="$1"
61-
base="$(dirname $dir)"
62-
(
63-
mkdir -p "$base"
64-
cd $base
65-
rel=$(git rev-parse --show-cdup)
66-
ln -sf ${rel}.git_externals/"$dir"
67-
)
60+
dir="$1"
61+
base="$(dirname $dir)"
62+
(
63+
mkdir -p "$base"
64+
cd $base
65+
rel=$(git rev-parse --show-cdup)
66+
ln -sf ${rel}.git_externals/"$dir"
67+
)
6868
}
6969

7070
function do_excludes()
7171
{
72-
dir="$1"
73-
git_excludes_path=.git/info/exclude
74-
if ! grep -q '^.git_externals$' "$git_excludes_path"
75-
then
76-
echo .git_externals >> "$git_excludes_path"
77-
fi
78-
79-
if ! grep -q '^'"$dir"'$' "$git_excludes_path"
80-
then
81-
echo "$dir" >> "$git_excludes_path"
82-
fi
72+
dir="$1"
73+
git_excludes_path=.git/info/exclude
74+
if ! grep -q '^.git_externals$' "$git_excludes_path"
75+
then
76+
echo .git_externals >> "$git_excludes_path"
77+
fi
78+
79+
if ! grep -q '^'"$dir"'$' "$git_excludes_path"
80+
then
81+
echo "$dir" >> "$git_excludes_path"
82+
fi
8383
}
8484

8585
function is_excluded()
@@ -91,28 +91,33 @@ function is_excluded()
9191
local result=1
9292
fi
9393
fi
94-
echo $result
94+
echo $result
9595
return
9696
}
9797

9898

99-
git svn show-externals|grep -vE '#|^$'| \
100-
sed 's/\(-r\)[ ]*\([0-9]\{1,\}\)/\1\2/'|while read -a words
99+
git svn show-externals | grep -vE '#|^$' | \
100+
sed 's/\(-r\)[ ]*\([0-9]\{1,\}\)/\1\2/' | \
101+
while read svn_externals
101102
do
102-
[ -z "${words[*]}" ] && continue
103103

104-
local_directory="$(echo ${words[0]}|sed 's,^/,,')"
105-
revision=""
106-
remote_url="${words[1]}"
104+
number_fields="$(echo ${svn_externals}|awk '{print NF}')"
105+
case $number_fields in
106+
2)
107+
local_directory="$(echo ${svn_externals} | awk '{print $1}' | sed 's,^/,,')"
108+
revision=""
109+
remote_url="$(echo ${svn_externals} | awk '{print $2}')"
110+
;;
111+
3)
112+
local_directory="$(echo ${svn_externals} | awk '{print $1}' | sed 's,^/,,')"
113+
revision=""$(echo ${svn_externals} | awk '{print $2}')
114+
remote_url="$(echo ${svn_externals} | awk '{print $3}')"
115+
;;
116+
*) continue ;;
117+
esac
107118

108119
check_excluded=$(is_excluded $local_directory)
109-
110120
if [ $check_excluded -eq 0 ] ; then
111-
if [ -n "${words[2]}" ]; then
112-
revision="${words[1]}"
113-
remote_url="${words[2]}"
114-
fi
115-
116121
if [ -n "$USE_SSH" ]; then
117122
echo "Rewriting url to use SVN+SSH."
118123
shopt -s extglob
@@ -133,5 +138,4 @@ do
133138
do_excludes "$local_directory"
134139
fi
135140

136-
done
137-
141+
done

0 commit comments

Comments
 (0)