xref: /trunk/main/solenv/bin/modules/RepoRevision.pm (revision 8403f704f807051b7f1dc4cc96915c2e825f68d3)
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