1f8d20be8SJim Jagielski#************************************************************** 2f8d20be8SJim Jagielski# 3f8d20be8SJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 4f8d20be8SJim Jagielski# or more contributor license agreements. See the NOTICE file 5f8d20be8SJim Jagielski# distributed with this work for additional information 6f8d20be8SJim Jagielski# regarding copyright ownership. The ASF licenses this file 7f8d20be8SJim Jagielski# to you under the Apache License, Version 2.0 (the 8f8d20be8SJim Jagielski# "License"); you may not use this file except in compliance 9f8d20be8SJim Jagielski# with the License. You may obtain a copy of the License at 10f8d20be8SJim Jagielski# 11f8d20be8SJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 12f8d20be8SJim Jagielski# 13f8d20be8SJim Jagielski# Unless required by applicable law or agreed to in writing, 14f8d20be8SJim Jagielski# software distributed under the License is distributed on an 15f8d20be8SJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16f8d20be8SJim Jagielski# KIND, either express or implied. See the License for the 17f8d20be8SJim Jagielski# specific language governing permissions and limitations 18f8d20be8SJim Jagielski# under the License. 19f8d20be8SJim Jagielski# 20f8d20be8SJim Jagielski#************************************************************** 21f8d20be8SJim Jagielski 22f8d20be8SJim Jagielski 23f8d20be8SJim Jagielski 24f8d20be8SJim Jagielskipackage RepoRevision; 25f8d20be8SJim Jagielski 2627a447d8SJim Jagielskisub DetectRevisionIdFromFile ($) 2727a447d8SJim Jagielski{ 2827a447d8SJim Jagielski my $path = shift; 2927a447d8SJim Jagielski my $id = undef; 3027a447d8SJim Jagielski 3127a447d8SJim Jagielski open( my $fh, '<', $path ) || return undef; 3227a447d8SJim Jagielski $id = <$fh>; 3327a447d8SJim Jagielski close $fh; 3427a447d8SJim Jagielski return $id; 3527a447d8SJim Jagielski} 3627a447d8SJim Jagielski 3727a447d8SJim Jagielskisub DetectRevisionIdFromGit ($) 3827a447d8SJim Jagielski{ 3927a447d8SJim Jagielski my $path = shift; 4027a447d8SJim Jagielski my $id = undef; 4127a447d8SJim Jagielski 4227a447d8SJim Jagielski $id = `git log -1 --pretty=format:%h --abbrev=10`; 4327a447d8SJim Jagielski return $id; 4427a447d8SJim Jagielski} 4527a447d8SJim Jagielski 46f8d20be8SJim Jagielskisub DetectRevisionIdFromSVN ($) 47f8d20be8SJim Jagielski{ 48f8d20be8SJim Jagielski my $path = shift; 49f8d20be8SJim Jagielski my $id = undef; 50f8d20be8SJim Jagielski 51f8d20be8SJim Jagielski open my $proc, "cd $path && svn info 2>\&1 |"; 52f8d20be8SJim Jagielski while (<$proc>) 53f8d20be8SJim Jagielski { 54f8d20be8SJim Jagielski if (/svn: E155007:/ || /svn: '.' is not a working copy/) 55f8d20be8SJim Jagielski { 56f8d20be8SJim Jagielski # Not in an SVN repository. 5727a447d8SJim Jagielski return undef; 58f8d20be8SJim Jagielski } 59f8d20be8SJim Jagielski else 60f8d20be8SJim Jagielski { 61f8d20be8SJim Jagielski if (/Last Changed Rev:\s+([0-9]+)/) 62f8d20be8SJim Jagielski { 63f8d20be8SJim Jagielski $id = $1; 64f8d20be8SJim Jagielski last; 65f8d20be8SJim Jagielski } 66f8d20be8SJim Jagielski } 67f8d20be8SJim Jagielski } 68f8d20be8SJim Jagielski close $proc; 69f8d20be8SJim Jagielski return $id; 70f8d20be8SJim Jagielski} 71f8d20be8SJim Jagielski 72f8d20be8SJim Jagielski 73f8d20be8SJim Jagielskisub DetectRevisionId ($) 74f8d20be8SJim Jagielski{ 75f8d20be8SJim Jagielski my $path = shift; 76f8d20be8SJim Jagielski my $id = undef; 7727a447d8SJim Jagielski 78*8403f704SJim Jagielski #NOTE: Magic cookie file 'reporevision.lst' created by aoo_srcrelease 79*8403f704SJim Jagielski $id = DetectRevisionIdFromFile ("$ENV{'SOLARENV'}/inc/reporevision.lst"); 80*8403f704SJim Jagielski if ($id) { return $id }; 81*8403f704SJim Jagielski 8227a447d8SJim Jagielski my $NotGit = `cd $path && git rev-parse --git-dir > /dev/null 2>&1`; 8327a447d8SJim Jagielski if (!$NotGit || -d ".git" || -d "$path/.git") 84f8d20be8SJim Jagielski { 8527a447d8SJim Jagielski $id = DetectRevisionIdFromGit ($path); 86f8d20be8SJim Jagielski } 87f8d20be8SJim Jagielski else 88f8d20be8SJim Jagielski { 8927a447d8SJim Jagielski $id = DetectRevisionIdFromSVN ($path); 90f8d20be8SJim Jagielski } 91f8d20be8SJim Jagielski 9227a447d8SJim Jagielski if (!$id) { $id = "unknown-rev" }; 93f8d20be8SJim Jagielski return $id; 94f8d20be8SJim Jagielski} 95f8d20be8SJim Jagielski 96f8d20be8SJim Jagielski1; 97