xref: /AOO42X/main/solenv/bin/modules/RepoRevision.pm (revision 8c74828b0ebc59f8600a01f0ab1402b26d564a68)
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