17e51ea90SJim Jagielski#************************************************************** 27e51ea90SJim Jagielski# 37e51ea90SJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 47e51ea90SJim Jagielski# or more contributor license agreements. See the NOTICE file 57e51ea90SJim Jagielski# distributed with this work for additional information 67e51ea90SJim Jagielski# regarding copyright ownership. The ASF licenses this file 77e51ea90SJim Jagielski# to you under the Apache License, Version 2.0 (the 87e51ea90SJim Jagielski# "License"); you may not use this file except in compliance 97e51ea90SJim Jagielski# with the License. You may obtain a copy of the License at 107e51ea90SJim Jagielski# 117e51ea90SJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 127e51ea90SJim Jagielski# 137e51ea90SJim Jagielski# Unless required by applicable law or agreed to in writing, 147e51ea90SJim Jagielski# software distributed under the License is distributed on an 157e51ea90SJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 167e51ea90SJim Jagielski# KIND, either express or implied. See the License for the 177e51ea90SJim Jagielski# specific language governing permissions and limitations 187e51ea90SJim Jagielski# under the License. 197e51ea90SJim Jagielski# 207e51ea90SJim Jagielski#************************************************************** 217e51ea90SJim Jagielski 227e51ea90SJim Jagielski 237e51ea90SJim Jagielski 247e51ea90SJim Jagielskipackage RepoRevision; 257e51ea90SJim Jagielski 26a7eb43eeSJim Jagielskisub DetectRevisionIdFromFile ($) 27a7eb43eeSJim Jagielski{ 28a7eb43eeSJim Jagielski my $path = shift; 29a7eb43eeSJim Jagielski my $id = undef; 30a7eb43eeSJim Jagielski 31a7eb43eeSJim Jagielski open( my $fh, '<', $path ) || return undef; 32a7eb43eeSJim Jagielski $id = <$fh>; 33a7eb43eeSJim Jagielski close $fh; 34a7eb43eeSJim Jagielski return $id; 35a7eb43eeSJim Jagielski} 36a7eb43eeSJim Jagielski 37a7eb43eeSJim Jagielskisub DetectRevisionIdFromGit ($) 38a7eb43eeSJim Jagielski{ 39a7eb43eeSJim Jagielski my $path = shift; 40a7eb43eeSJim Jagielski my $id = undef; 41a7eb43eeSJim Jagielski 42a7eb43eeSJim Jagielski $id = `git log -1 --pretty=format:%h --abbrev=10`; 43a7eb43eeSJim Jagielski return $id; 44a7eb43eeSJim Jagielski} 45a7eb43eeSJim Jagielski 467e51ea90SJim Jagielskisub DetectRevisionIdFromSVN ($) 477e51ea90SJim Jagielski{ 487e51ea90SJim Jagielski my $path = shift; 497e51ea90SJim Jagielski my $id = undef; 507e51ea90SJim Jagielski 517e51ea90SJim Jagielski open my $proc, "cd $path && svn info 2>\&1 |"; 527e51ea90SJim Jagielski while (<$proc>) 537e51ea90SJim Jagielski { 547e51ea90SJim Jagielski if (/svn: E155007:/ || /svn: '.' is not a working copy/) 557e51ea90SJim Jagielski { 567e51ea90SJim Jagielski # Not in an SVN repository. 57a7eb43eeSJim Jagielski return undef; 587e51ea90SJim Jagielski } 597e51ea90SJim Jagielski else 607e51ea90SJim Jagielski { 617e51ea90SJim Jagielski if (/Last Changed Rev:\s+([0-9]+)/) 627e51ea90SJim Jagielski { 637e51ea90SJim Jagielski $id = $1; 647e51ea90SJim Jagielski last; 657e51ea90SJim Jagielski } 667e51ea90SJim Jagielski } 677e51ea90SJim Jagielski } 687e51ea90SJim Jagielski close $proc; 697e51ea90SJim Jagielski return $id; 707e51ea90SJim Jagielski} 717e51ea90SJim Jagielski 727e51ea90SJim Jagielski 737e51ea90SJim Jagielskisub DetectRevisionId ($) 747e51ea90SJim Jagielski{ 757e51ea90SJim Jagielski my $path = shift; 767e51ea90SJim Jagielski my $id = undef; 77a7eb43eeSJim Jagielski 78*8c74828bSJim Jagielski #NOTE: Magic cookie file 'reporevision.lst' created by aoo_srcrelease 79*8c74828bSJim Jagielski $id = DetectRevisionIdFromFile ("$ENV{'SOLARENV'}/inc/reporevision.lst"); 80*8c74828bSJim Jagielski if ($id) { return $id }; 81*8c74828bSJim Jagielski 82a7eb43eeSJim Jagielski my $NotGit = `cd $path && git rev-parse --git-dir > /dev/null 2>&1`; 83a7eb43eeSJim Jagielski if (!$NotGit || -d ".git" || -d "$path/.git") 847e51ea90SJim Jagielski { 85a7eb43eeSJim Jagielski $id = DetectRevisionIdFromGit ($path); 867e51ea90SJim Jagielski } 877e51ea90SJim Jagielski else 887e51ea90SJim Jagielski { 89a7eb43eeSJim Jagielski $id = DetectRevisionIdFromSVN ($path); 907e51ea90SJim Jagielski } 917e51ea90SJim Jagielski 92a7eb43eeSJim Jagielski if (!$id) { $id = "unknown-rev" }; 937e51ea90SJim Jagielski return $id; 947e51ea90SJim Jagielski} 957e51ea90SJim Jagielski 967e51ea90SJim Jagielski1; 97