aboutsummaryrefslogtreecommitdiff
path: root/gitremotes
blob: d49cf2d9eff41cc001d9b5c6145b1d9a20e69050 (plain)
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
#!/usr/bin/perl
# Parses list of remotes in doc/git.mdwn, configures git to use them
# all, and fetches updates from them.

my $error=0;

open (IN, "doc/git.mdwn") || die "doc/git.mdwn: $!";
while (<IN>) {
	if (/^\*\s+\[?\[?(\w+)(?:\|\w+)?\]?\]?\s+`([^>]+)`/) {
		# note that the remote name has to be a simple word (\w)
		# for security/sanity reasons
		my $remote=$1;
		my $url=$2;

		# check configured url to deal with it changing
		my $info=`git remote show -n $remote`;
		my ($oldurl)=$info=~/URL: (.*)/m;
		my $r;
		if ($oldurl ne $url) {
			system("git remote rm $remote 2>/dev/null");
			$r = system("git", "remote", "add", "-f", $remote, $url)
		}
		else {
			$r = system("git", "fetch", "--no-tag", $remote);
		}

		if ($r != 0) {
			print "$remote failed\n";
		}
		$error |= $r;
		
		# drop stale tracking branches
		system("git", "remote", "prune", $remote);
	}
}
close IN;

exit $error;