diff options
-rw-r--r-- | build.xml | 11 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/Global.scala | 28 | ||||
-rwxr-xr-x | tools/epfl-publish | 17 | ||||
-rwxr-xr-x | tools/get-scala-revision | 27 |
4 files changed, 62 insertions, 21 deletions
@@ -189,9 +189,6 @@ PROPERTIES <!-- if ANT_OPTS is already set by the environment, it will be unaltered, but if it is unset it will take this default value. --> <property name="env.ANT_OPTS" value="-Xms1536M -Xmx1536M -Xss1M -XX:MaxPermSize=192M -XX:+UseParallelGC" /> - - <!-- to find max heap usage: -Xaprof ; currently at 980M for locker.comp --> - <echo message="Forking with JVM opts: ${env.ANT_OPTS} ${jvm.opts}" /> <property name="scalacfork.jvmargs" @@ -246,8 +243,12 @@ INITIALISATION value="${version.major}.${version.minor}.${version.patch}.${git.describe}"/> <!-- And print-out what we are building --> - <echo level="info" message="Build number is '${version.number}'"/> - <echo level="info" message="Built ${time.human} from revision ${git.describe} with ${java.vm.name} ${java.version}"/> + <echo message=" build time: ${time.human}" /> + <echo message=" java version: ${java.vm.name} ${java.version}" /> + <echo message=" java args: ${env.ANT_OPTS} ${jvm.opts}" /> + <echo message=" javac args: ${javac.args}" /> + <echo message=" scalac args: ${scalac.args}" /> + <echo message=" build number: ${version.number}" /> <!-- Local libs (developer use.) --> <mkdir dir="${lib-extra.dir}"/> diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala index b4f14dd21b..f14474eda8 100644 --- a/src/compiler/scala/tools/nsc/Global.scala +++ b/src/compiler/scala/tools/nsc/Global.scala @@ -343,7 +343,14 @@ class Global(var currentSettings: Settings, var reporter: Reporter) extends Symb def run() { echoPhaseSummary(this) - currentRun.units foreach applyPhase + currentRun.units foreach { unit => + if (opt.timings) { + val start = System.nanoTime + try applyPhase(unit) + finally unitTimings(unit) += (System.nanoTime - start) + } + else applyPhase(unit) + } } def apply(unit: CompilationUnit): Unit @@ -669,6 +676,21 @@ class Global(var currentSettings: Settings, var reporter: Reporter) extends Symb protected lazy val phasesSet = new mutable.HashSet[SubComponent] protected lazy val phasesDescMap = new mutable.HashMap[SubComponent, String] withDefaultValue "" private lazy val phaseTimings = new Phases.TimingModel // tracking phase stats + private lazy val unitTimings = mutable.HashMap[CompilationUnit, Long]() withDefaultValue 0L // tracking time spent per unit + private def unitTimingsFormatted(): String = { + def toMillis(nanos: Long) = "%.3f" format nanos / 1000000d + + val formatter = new util.TableDef[(String, String)] { + >> ("ms" -> (_._1)) >+ " " + << ("path" -> (_._2)) + } + "" + ( + new formatter.Table(unitTimings.toList sortBy (-_._2) map { + case (unit, nanos) => (toMillis(nanos), unit.source.path) + }) + ) + } + protected def addToPhasesSet(sub: SubComponent, descr: String) { phasesSet += sub phasesDescMap(sub) = descr @@ -1149,8 +1171,10 @@ class Global(var currentSettings: Settings, var reporter: Reporter) extends Symb if (opt.profileAll) profiler.stopProfiling() - if (opt.timings) + if (opt.timings) { inform(phaseTimings.formatted) + inform(unitTimingsFormatted) + } // In case no phase was specified for -Xshow-class/object, show it now for sure. if (opt.noShow) diff --git a/tools/epfl-publish b/tools/epfl-publish index 2c0141e264..e9cd97b3d2 100755 --- a/tools/epfl-publish +++ b/tools/epfl-publish @@ -1,6 +1,7 @@ #!/usr/bin/env bash # # publishes nightly build if $publish_to is set in environment. +# alternate maven settings.xml file given in $maven_settings. # [[ $# -eq 1 ]] || { @@ -20,7 +21,19 @@ version="$1" } # should not be hardcoded -mavenSettings="/home/linuxsoft/apps/hudson-maven-settings/settings.xml" +# adds -Dsettings.file= if fixed path is present +mavenSettingsOption () { + hardcoded_path="/home/linuxsoft/apps/hudson-maven-settings/settings.xml" + + # environment variable + if [[ -n $maven_settings ]]; then + echo -Dsettings.file="$maven_settings" + elif [[ -f $hardcoded_path ]]; then + echo -Dsettings.file="$hardcoded_path" + fi +} + +mavenSettings=${maven_settings:-findMavenSettings} if [[ -z $publish_to ]]; then echo "Nothing to publish." @@ -33,5 +46,5 @@ else # sbaz [[ -d dists/sbaz ]] && rsync -az dists/sbaz/ "$publish_to/sbaz" # Deploy the maven artifacts on scala-tools.org - ( cd dists/maven/latest && ant deploy.snapshot -Dsettings.file="$mavenSettings" ) + ( cd dists/maven/latest && ant deploy.snapshot $(mavenSettingsOption) ) fi diff --git a/tools/get-scala-revision b/tools/get-scala-revision index e8597844cc..3977a61040 100755 --- a/tools/get-scala-revision +++ b/tools/get-scala-revision @@ -1,19 +1,22 @@ -#!/bin/sh +#!/usr/bin/env bash # # Usage: get-scala-revision [dir] # Figures out current scala revision of a git clone. # # If no dir is given, current working dir is used. -[ -n "$1" ] && cd "$1" +# not like releases come out so often that we are duty-bound +# to recalculate this every time. +# git merge-base v2.9.1 master +devbase="d6f3184fc8" -# dev should be a tag at the merge-base of master and the -# most recent release. -if [ -z $(git tag -l dev) ]; then - # no dev tag available - this will generate dev-g<sha> - echo "dev-g$(git describe HEAD --abbrev=7 --always)" -else - # dev tag exists - this generates dev-NNNN-g<sha> - # where NNNN is the number of commits since dev. - git describe HEAD --abbrev=7 --match dev -fi +# reimplementing git describe hopefully in a way which works +# without any particular tags, branches, or recent versions of git. +# this is supposed to generate +# dev-NNNN-g<sha> +# where NNNN is the number of commits since devbase, which +# is the merge-base of the most recent release and master. +# Presently hardcoded to reduce uncertainty, v2.9.1/master. +commits=$(git --no-pager log --pretty=oneline $devbase..HEAD | wc -l) +sha=$(git rev-list -n 1 HEAD) +printf "dev-%s-g%s\n" $commits ${sha:0:7} |