xref: /AOO41X/main/solenv/bin/modules/RepoRevision.pm (revision 67baec149339bf2110a9e91f415b27b41c65b595)
1eb479a10SJim Jagielski#**************************************************************
2eb479a10SJim Jagielski#
3eb479a10SJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4eb479a10SJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5eb479a10SJim Jagielski#  distributed with this work for additional information
6eb479a10SJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7eb479a10SJim Jagielski#  to you under the Apache License, Version 2.0 (the
8eb479a10SJim Jagielski#  "License"); you may not use this file except in compliance
9eb479a10SJim Jagielski#  with the License.  You may obtain a copy of the License at
10eb479a10SJim Jagielski#
11eb479a10SJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12eb479a10SJim Jagielski#
13eb479a10SJim Jagielski#  Unless required by applicable law or agreed to in writing,
14eb479a10SJim Jagielski#  software distributed under the License is distributed on an
15eb479a10SJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16eb479a10SJim Jagielski#  KIND, either express or implied.  See the License for the
17eb479a10SJim Jagielski#  specific language governing permissions and limitations
18eb479a10SJim Jagielski#  under the License.
19eb479a10SJim Jagielski#
20eb479a10SJim Jagielski#**************************************************************
21eb479a10SJim Jagielski
22eb479a10SJim Jagielski
23eb479a10SJim Jagielski
24eb479a10SJim Jagielskipackage RepoRevision;
25eb479a10SJim Jagielski
260c6d6194SJim Jagielskisub DetectRevisionIdFromFile ($)
270c6d6194SJim Jagielski{
280c6d6194SJim Jagielski	my $path = shift;
290c6d6194SJim Jagielski	my $id = undef;
300c6d6194SJim Jagielski
310c6d6194SJim Jagielski	open( my $fh, '<', $path ) || return undef;
320c6d6194SJim Jagielski	$id = <$fh>;
330c6d6194SJim Jagielski	close $fh;
340c6d6194SJim Jagielski	return $id;
350c6d6194SJim Jagielski}
360c6d6194SJim Jagielski
370c6d6194SJim Jagielskisub DetectRevisionIdFromGit ($)
380c6d6194SJim Jagielski{
390c6d6194SJim Jagielski	my $path = shift;
400c6d6194SJim Jagielski	my $id = undef;
410c6d6194SJim Jagielski
420c6d6194SJim Jagielski	$id = `git log -1 --pretty=format:%h --abbrev=10`;
430c6d6194SJim Jagielski	return $id;
440c6d6194SJim Jagielski}
450c6d6194SJim Jagielski
46eb479a10SJim Jagielskisub DetectRevisionIdFromSVN ($)
47eb479a10SJim Jagielski{
48eb479a10SJim Jagielski	my $path = shift;
49eb479a10SJim Jagielski	my $id = undef;
50eb479a10SJim Jagielski
51eb479a10SJim Jagielski	open my $proc, "cd $path && svn info 2>\&1 |";
52eb479a10SJim Jagielski	while (<$proc>)
53eb479a10SJim Jagielski	{
54eb479a10SJim Jagielski		if (/svn: E155007:/ || /svn: '.' is not a working copy/)
55eb479a10SJim Jagielski		{
56eb479a10SJim Jagielski			# Not in an SVN repository.
570c6d6194SJim Jagielski			return undef;
58eb479a10SJim Jagielski		}
59eb479a10SJim Jagielski		else
60eb479a10SJim Jagielski		{
61eb479a10SJim Jagielski			if (/Last Changed Rev:\s+([0-9]+)/)
62eb479a10SJim Jagielski			{
63eb479a10SJim Jagielski				$id = $1;
64eb479a10SJim Jagielski				last;
65eb479a10SJim Jagielski			}
66eb479a10SJim Jagielski		}
67eb479a10SJim Jagielski	}
68eb479a10SJim Jagielski	close $proc;
69eb479a10SJim Jagielski	return $id;
70eb479a10SJim Jagielski}
71eb479a10SJim Jagielski
72eb479a10SJim Jagielski
73eb479a10SJim Jagielskisub DetectRevisionId ($)
74eb479a10SJim Jagielski{
75eb479a10SJim Jagielski	my $path = shift;
76eb479a10SJim Jagielski	my $id = undef;
770c6d6194SJim Jagielski
78*67baec14SJim Jagielski	#NOTE: Magic cookie file 'reporevision.lst' created by aoo_srcrelease
79*67baec14SJim Jagielski	$id = DetectRevisionIdFromFile ("$ENV{'SOLARENV'}/inc/reporevision.lst");
80*67baec14SJim Jagielski	if ($id) { return $id };
81*67baec14SJim Jagielski
820c6d6194SJim Jagielski	my $NotGit = `cd $path && git rev-parse --git-dir > /dev/null 2>&1`;
830c6d6194SJim Jagielski	if (!$NotGit || -d ".git" || -d "$path/.git")
84eb479a10SJim Jagielski	{
850c6d6194SJim Jagielski		$id = DetectRevisionIdFromGit ($path);
86eb479a10SJim Jagielski	}
87eb479a10SJim Jagielski	else
88eb479a10SJim Jagielski	{
890c6d6194SJim Jagielski		$id = DetectRevisionIdFromSVN ($path);
90eb479a10SJim Jagielski	}
91eb479a10SJim Jagielski
920c6d6194SJim Jagielski	if (!$id) { $id = "unknown-rev" };
93eb479a10SJim Jagielski	return $id;
94eb479a10SJim Jagielski}
95eb479a10SJim Jagielski
96eb479a10SJim Jagielski1;
97