config/Moz/Milestone.pm
author Eric Rahm <erahm@mozilla.com>
Thu, 10 Nov 2016 12:47:23 -0800
changeset 348770 e27050b02d69b88e19e0dcd151916f78259f9bb1
parent 161940 9e197c3158b0e214723aa90cd942b4e7715cde14
permissions -rw-r--r--
Bug 1313488 - Part 1: Convert XPCOM test TestDeadlockDetector to a gtest. r=froydnj This converts TestDeadlockDetector to a gtest. The logic for spawning off subprocesses is replaced with gtest's built-in death tests. On linux this will clone() the process and assert that the child process generates the appropriate assertion message. On OSX it will use fork(). In theory this should work on Windows as well buy spawning a new process but this test currently disabled there. MozReview-Commit-ID: 9Sl0hHBVGT3

#!/usr/bin/perl -w
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

package Moz::Milestone;
use strict;

use vars qw($officialMilestone
            $milestone);

local $Moz::Milestone::milestone;
local $Moz::Milestone::officialMilestone;

#
# Usage:  getOfficialMilestone($milestoneFile)
# Returns full milestone (x.x.x.x[ab12pre+])
#
sub getOfficialMilestone($) {
  my $mfile = $_[0];
  open(FILE,"$mfile") ||
    die ("Can't open $mfile for reading!");

  my $num = <FILE>;
  while($num =~ /^\s*#/ || $num !~ /^\d/) {
      $num = <FILE>;
  }

  close(FILE);
  if ($num !~ /^\d/) { return; }
  chomp($num);
  # Remove extra ^M caused by using dos-mode line-endings
  chop $num if (substr($num, -1, 1) eq "\r");
  $Moz::Milestone::officialMilestone = $num;
  $Moz::Milestone::milestone = &getMilestoneNum;
  return $num;
}

#
# Usage: getMilestoneNum($num)
# Returns: milestone without a + if it exists.
#
sub getMilestoneNum {
  if (defined($Moz::Milestone::milestone)) {
    return $Moz::Milestone::milestone;
  }

  if (defined($Moz::Milestone::officialMilestone)) {
    $Moz::Milestone::milestone = $Moz::Milestone::officialMilestone;
  } else {
    $Moz::Milestone::milestone = $_[0];
  }

  if ($Moz::Milestone::milestone =~ /\+$/) {    # for x.x.x+, strip off the +
    $Moz::Milestone::milestone =~ s/\+$//;
  }

  return $Moz::Milestone::milestone;
}

#
# Usage: getMilestoneQualifier($num)
# Returns: + if it exists.
#
sub getMilestoneQualifier {
  my $milestoneQualifier;
  if (defined($Moz::Milestone::officialMilestone)) {
    $milestoneQualifier = $Moz::Milestone::officialMilestone;
  } else {
    $milestoneQualifier = $_[0];
  }

  if ($milestoneQualifier =~ /\+$/) {
    return "+";
  }
}

sub getMilestoneMajor {
  my $milestoneMajor;
  if (defined($Moz::Milestone::milestone)) {
    $milestoneMajor = $Moz::Milestone::milestone;
  } else {
    $milestoneMajor = $_[0];
  }
  my @parts = split(/\./,$milestoneMajor);
  return $parts[0];
}

sub getMilestoneMinor {
  my $milestoneMinor;
  if (defined($Moz::Milestone::milestone)) {
    $milestoneMinor = $Moz::Milestone::milestone;
  } else {
    $milestoneMinor = $_[0];
  }
  my @parts = split(/\./,$milestoneMinor);

  if ($#parts < 1 ) { return 0; }
  return $parts[1];
}

sub getMilestoneMini {
  my $milestoneMini;
  if (defined($Moz::Milestone::milestone)) {
    $milestoneMini = $Moz::Milestone::milestone;
  } else {
    $milestoneMini = $_[0];
  }
  my @parts = split(/\./,$milestoneMini);

  if ($#parts < 2 ) { return 0; }
  return $parts[2];
}

sub getMilestoneMicro {
  my $milestoneMicro;
  if (defined($Moz::Milestone::milestone)) {
    $milestoneMicro = $Moz::Milestone::milestone;
  } else {
    $milestoneMicro = $_[0];
  }
  my @parts = split(/\./,$milestoneMicro);

  if ($#parts < 3 ) { return 0; }
  return $parts[3];
}

sub getMilestoneAB {
  my $milestoneAB;
  if (defined($Moz::Milestone::milestone)) {
    $milestoneAB = $Moz::Milestone::milestone;
  } else {
    $milestoneAB = $_[0];
  }
  
  if ($milestoneAB =~ /a/) { return "alpha"; }
  if ($milestoneAB =~ /b/) { return "beta"; }
  return "final";
}

#
# Usage:  getMilestoneABWithNum($milestoneFile)
# Returns the alpha and beta tag with its number (a1, a2, b3, ...)
#
sub getMilestoneABWithNum {
  my $milestoneABNum;
  if (defined($Moz::Milestone::milestone)) {
    $milestoneABNum = $Moz::Milestone::milestone;
  } else {
    $milestoneABNum = $_[0];
  }

  if ($milestoneABNum =~ /([ab]\d+)/) {
    return $1;
  } else {
    return "";
  }
}

#
# build_file($template_file,$output_file)
#
sub build_file($$) {
  my @FILE;
  my @MILESTONE_PARTS;
  my $MINI_VERSION = 0;
  my $MICRO_VERSION = 0;
  my $OFFICIAL = 0;
  my $QUALIFIER = "";

  if (!defined($Moz::Milestone::milestone)) { die("$0: no milestone file set!\n"); }
  @MILESTONE_PARTS = split(/\./, &getMilestoneNum);
  if ($#MILESTONE_PARTS >= 2) {
    $MINI_VERSION = 1;
  } else {
    $MILESTONE_PARTS[2] = 0;
  }
  if ($#MILESTONE_PARTS >= 3) {
    $MICRO_VERSION = 1;
  } else {
    $MILESTONE_PARTS[3] = 0;
  }
  if (! &getMilestoneQualifier) {
    $OFFICIAL = 1;
  } else {
    $QUALIFIER = "+";
  }

  if (-e $_[0]) {
    open(FILE, "$_[0]") || die("$0: Can't open $_[0] for reading!\n");
    @FILE = <FILE>;
    close(FILE);

    open(FILE, ">$_[1]") || die("$0: Can't open $_[1] for writing!\n");

    #
    # There will be more of these based on what we need for files.
    #
    foreach(@FILE) {
      s/__MOZ_MAJOR_VERSION__/$MILESTONE_PARTS[0]/g;
      s/__MOZ_MINOR_VERSION__/$MILESTONE_PARTS[1]/g;
      s/__MOZ_MINI_VERSION__/$MILESTONE_PARTS[2]/g;
      s/__MOZ_MICRO_VERSION__/$MILESTONE_PARTS[3]/g;
      if ($MINI_VERSION) {
        s/__MOZ_OPTIONAL_MINI_VERSION__/.$MILESTONE_PARTS[2]/g;
      }
      if ($MICRO_VERSION) {
        s/__MOZ_OPTIONAL_MICRO_VERSION__/.$MILESTONE_PARTS[3]/g;
      }

      print FILE $_;
    }
    close(FILE);
  } else {
    die("$0: $_[0] doesn't exist for autoversioning!\n");
  }

}

1;