setlocalversion (2fc2991175bf77395e6b15fe6b2304d3bf72da40) | setlocalversion (117a93db1dcd6ed61336b27e4e2938f791c1841b) |
---|---|
1#!/usr/bin/perl 2# Copyright 2004 - Ryan Anderson <ryan@michonline.com> GPL v2 | 1#!/bin/sh 2# Print additional version information for non-release trees. |
3 | 3 |
4use strict; 5use warnings; 6use Digest::MD5; 7require 5.006; 8 9if (@ARGV != 1) { 10 print <<EOT; 11Usage: setlocalversion <srctree> 12EOT 13 exit(1); | 4usage() { 5 echo "Usage: $0 [srctree]" >&2 6 exit 1 |
14} 15 | 7} 8 |
16my ($srctree) = @ARGV; 17chdir($srctree); | 9cd "${1:-.}" || usage |
18 | 10 |
19my @LOCALVERSIONS = (); | 11# Check for git and a git repo. 12if head=`git rev-parse --verify HEAD 2>/dev/null`; then 13 # Do we have an untagged version? 14 if [ "`git name-rev --tags HEAD`" = "HEAD undefined" ]; then 15 printf '%s%s' -g `echo "$head" | cut -c1-8` 16 fi |
20 | 17 |
21# We are going to use the following commands to try and determine if this 22# repository is at a Version boundary (i.e, 2.6.10 vs 2.6.10 + some patches) We 23# currently assume that all meaningful version boundaries are marked by a tag. 24# We don't care what the tag is, just that something exists. 25 26# Git/Cogito store the top-of-tree "commit" in .git/HEAD 27# A list of known tags sits in .git/refs/tags/ 28# 29# The simple trick here is to just compare the two of these, and if we get a 30# match, return nothing, otherwise, return a subset of the SHA-1 hash in 31# .git/HEAD 32 33sub do_git_checks { 34 open(H,"<.git/HEAD") or return; 35 my $head = <H>; 36 chomp $head; 37 close(H); 38 39 opendir(D,".git/refs/tags") or return; 40 foreach my $tagfile (grep !/^\.{1,2}$/, readdir(D)) { 41 open(F,"<.git/refs/tags/" . $tagfile) or return; 42 my $tag = <F>; 43 chomp $tag; 44 close(F); 45 return if ($tag eq $head); 46 } 47 closedir(D); 48 49 push @LOCALVERSIONS, "g" . substr($head,0,8); 50} 51 52if ( -d ".git") { 53 do_git_checks(); 54} 55 56printf "-%s\n", join("-",@LOCALVERSIONS) if (scalar @LOCALVERSIONS > 0); | 18 # Are there uncommitted changes? 19 if git diff-files | read dummy; then 20 printf '%s' -git_dirty 21 fi 22fi |