Skip to content

Commit 3b86f51

Browse files
authored
Merge branch 'master' into utility-collapse-ws-#73
2 parents 88df70c + 58ff98b commit 3b86f51

File tree

113 files changed

+457
-782
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+457
-782
lines changed

.travis.yml

+5
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ env:
1414

1515
script: admin/build.sh
1616

17+
addons:
18+
apt:
19+
packages:
20+
- openjdk-6-jdk
21+
1722
jdk:
1823
- openjdk6
1924
- oraclejdk8

LICENSE.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
Copyright (c) 2002-2016 EPFL
2-
Copyright (c) 2011-2016 Lightbend, Inc.
1+
Copyright (c) 2002-2017 EPFL
2+
Copyright (c) 2011-2017 Lightbend, Inc.
33

44
All rights reserved.
55

66
Redistribution and use in source and binary forms, with or without modification,
77
are permitted provided that the following conditions are met:
88

9-
* Redistributions of source code must retain the above copyright notice,
10-
this list of conditions and the following disclaimer.
11-
* Redistributions in binary form must reproduce the above copyright notice,
12-
this list of conditions and the following disclaimer in the documentation
13-
and/or other materials provided with the distribution.
14-
* Neither the name of the EPFL nor the names of its contributors
15-
may be used to endorse or promote products derived from this software
16-
without specific prior written permission.
9+
* Redistributions of source code must retain the above copyright notice,
10+
this list of conditions and the following disclaimer.
11+
* Redistributions in binary form must reproduce the above copyright notice,
12+
this list of conditions and the following disclaimer in the documentation
13+
and/or other materials provided with the distribution.
14+
* Neither the name of the EPFL nor the names of its contributors
15+
may be used to endorse or promote products derived from this software
16+
without specific prior written permission.
1717

1818
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1919
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

README.md

+16-6
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
1-
scala-xml [<img src="https://img.shields.io/travis/scala/scala-xml.svg"/>](https://travis-ci.org/scala/scala-xml) [<img src="https://img.shields.io/maven-central/v/org.scala-lang.modules/scala-xml_2.11.svg?label=latest%20release%20for%202.11"/>](http://search.maven.org/#search%7Cga%7C1%7Cg%3Aorg.scala-lang.modules%20a%3Ascala-xml_2.11) [<img src="https://img.shields.io/maven-central/v/org.scala-lang.modules/scala-xml_2.12*.svg?label=latest%20release%20for%202.12"/>](http://search.maven.org/#search%7Cga%7C1%7Cg%3Aorg.scala-lang.modules%20a%3Ascala-xml_2.12*) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/scala/scala-xml)
1+
scala-xml
2+
[![Travis](https://img.shields.io/travis/scala/scala-xml.svg)](https://travis-ci.org/scala/scala-xml)
3+
[![latest release for 2.11](https://img.shields.io/maven-central/v/org.scala-lang.modules/scala-xml_2.11.svg?label=scala+2.11)](http://mvnrepository.com/artifact/org.scala-lang.modules/scala-xml_2.11)
4+
[![latest release for 2.12](https://img.shields.io/maven-central/v/org.scala-lang.modules/scala-xml_2.12.svg?label=scala+2.12)](http://mvnrepository.com/artifact/org.scala-lang.modules/scala-xml_2.12)
5+
[![latest release for 2.13.0-M2](https://img.shields.io/maven-central/v/org.scala-lang.modules/scala-xml_2.13.0-M2.svg?label=scala+2.13.0-M2)](http://mvnrepository.com/artifact/org.scala-lang.modules/scala-xml_2.13.0-M2)
6+
[![Gitter](https://badges.gitter.im/Join+Chat.svg)](https://gitter.im/scala/scala-xml)
27
=========
38

4-
The standard Scala XML library. Please file issues here instead of over at issues.scala-lang.org.
9+
The standard Scala XML library. Please file XML issues here, not at https://github.com/scala/bug/issues.
510

611
Since Scala 2.11, this library is a separate jar that can be omitted from Scala projects that do not use XML.
7-
If you are cross-building a project that uses scala-xml with both Scala 2.10 and later Scala versions, take a look [this example](https://github.com/scala/scala-module-dependency-sample).
812

9-
The compiler was decoupled from this particular implementation using the same approach as for comprehensions (XML syntax is desugared into a set of method calls, which unfortunately is only defined by the [implementation](https://github.com/scala/scala/blob/2.11.x/src/compiler/scala/tools/nsc/ast/parser/SymbolicXMLBuilder.scala)). Alternative implementations are welcome!
13+
The decoupling works because the compiler desugars XML literals in Scala source code into a set of method calls. Alternative implementations of these calls are welcome! (The calls are unfortunately only defined by the [implementation](https://github.com/scala/scala/blob/2.11.x/src/compiler/scala/tools/nsc/ast/parser/SymbolicXMLBuilder.scala).)
1014

11-
API documentation is available [here](http://www.scala-lang.org/api/current/scala-xml/).
15+
API documentation is available [here](http://www.scala-lang.org/api/current/scala-xml/scala/xml/index.html).
16+
17+
How to documentation is available in the [wiki](https://github.com/scala/scala-xml/wiki)
18+
19+
## Cross-building with 2.10
20+
21+
If you are cross-building a project that uses scala-xml with both Scala 2.10 and later Scala versions, take a look at [this example](https://github.com/scala/scala-module-dependency-sample).
1222

1323
## Maintenance status
1424

15-
This library is community-maintained. The lead maintainer is [@biswanaths](https://github.com/biswanaths).
25+
This library is community-maintained. The lead maintainers are [@aaron_s_hawley](https://github.com/ashawley) and [@biswanaths](https://github.com/biswanaths).
1626

1727
## Security best practices
1828

admin/README.md

+40-28
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
## Tag Driven Releasing
22

3-
Copied from https://github.com/scala/scala-java8-compat/commit/4a6cfc97cd95227b86650410e1b632e5ff79335b.
4-
53
### Background Reading
64

75
- http://docs.travis-ci.com/user/environment-variables/
@@ -14,47 +12,61 @@ To configure tag driven releases from Travis CI.
1412

1513
1. Generate a key pair for this repository with `./admin/genKeyPair.sh`.
1614
Edit `.travis.yml` and `admin/build.sh` as prompted.
17-
2. Publish the public key to https://pgp.mit.edu
18-
3. Store other secrets as encrypted environment variables with `admin/encryptEnvVars.sh`.
15+
1. Publish the public key to https://pgp.mit.edu
16+
1. Store other secrets as encrypted environment variables with `admin/encryptEnvVars.sh`.
1917
Edit `.travis.yml` as prompted.
20-
4. Edit `.travis.yml` to use `./admin/build.sh` as the build script,
18+
1. Edit `.travis.yml` to use `./admin/build.sh` as the build script,
2119
and edit that script to use the tasks required for this project.
22-
5. Edit `build.sbt` to select which JDK will be used for publishing
23-
for which Scala versions.
20+
1. Edit `build.sbt`'s `scalaVersionsByJvm in ThisBuild` to select Scala and JVM version
21+
combinations that will be used for publishing.
2422

25-
It is important to add comments in .travis.yml to identify the name
23+
It is important to add comments in `.travis.yml` to identify the name
2624
of each environment variable encoded in a `:secure` section.
2725

28-
After all of these steps, your .travis.yml should contain config of the
29-
form:
26+
After these steps, your `.travis.yml` should contain config of the form:
27+
28+
```
29+
language: scala
30+
31+
env:
32+
global:
33+
# PGP_PASSPHRASE
34+
- secure: "XXXXXX"
35+
# SONA_USER
36+
- secure: "XXXXXX"
37+
# SONA_PASS
38+
- secure: "XXXXXX"
3039
31-
language: scala
32-
env:
33-
global:
34-
# PGP_PASSPHRASE
35-
- secure: "XXXXXX"
36-
# SONA_USER
37-
- secure: "XXXXXX"
38-
# SONA_PASS
39-
- secure: "XXXXXX"
40-
script: admin/build.sh
40+
script: admin/build.sh
41+
42+
jdk:
43+
- openjdk6
44+
- oraclejdk8
45+
46+
notifications:
47+
email:
48+
49+
```
4150

4251
If Sonatype credentials change in the future, step 3 can be repeated
4352
without generating a new key.
4453

45-
Be sure to use SBT 0.13.7 or higher to avoid [#1430](https://github.com/sbt/sbt/issues/1430)!
46-
4754
### Testing
4855

49-
1. Follow the release process below to create a dummy release (e.g. 0.1.0-TEST1).
56+
1. Follow the release process below to create a dummy release (e.g., `v0.1.0-TEST1`).
5057
Confirm that the release was staged to Sonatype but do not release it to Maven
5158
central. Instead, drop the staging repository.
5259

5360
### Performing a release
5461

55-
1. Create a GitHub "Release" (with a corresponding tag) via the GitHub
62+
1. Create a GitHub "Release" with a corresponding tag (e.g., `v0.1.1`) via the GitHub
5663
web interface.
57-
2. Travis CI will schedule a build for this release. Review the build logs.
58-
3. Log into https://oss.sonatype.org/ and identify the staging repository.
59-
4. Sanity check its contents
60-
5. Release staging repository to Maven and send out release announcement.
64+
1. The release will be published using the Scala and JVM version combinations specified
65+
in `scalaVersionsByJvm` in `build.sbt`.
66+
- If you need to release against a different Scala version, include the Scala version
67+
and the JVM version to use in the tag name, separated by `#`s (e.g., `v0.1.1#2.13.0-M1#8`).
68+
Note that the JVM version needs to be listed in `.travis.yml` for the build to run.
69+
1. Travis CI will schedule a build for this release. Review the build logs.
70+
1. Log into https://oss.sonatype.org/ and identify the staging repository.
71+
1. Sanity check its contents.
72+
1. Release staging repository to Maven and send out release announcement.

admin/build.sh

+36-8
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,43 @@
22

33
set -e
44

5-
# prep environment for publish to sonatype staging if the HEAD commit is tagged
5+
# Builds of tagged revisions are published to sonatype staging.
66

7-
# git on travis does not fetch tags, but we have TRAVIS_TAG
8-
# headTag=$(git describe --exact-match ||:)
7+
# Travis runs a build on new revisions and on new tags, so a tagged revision is built twice.
8+
# Builds for a tag have TRAVIS_TAG defined, which we use for identifying tagged builds.
9+
# Checking the local git clone would not work because git on travis does not fetch tags.
10+
11+
# The version number to be published is extracted from the tag, e.g., v1.2.3 publishes
12+
# version 1.2.3 using all Scala versions in build.sbt's `crossScalaVersions`.
13+
14+
# When a new, binary incompatible Scala version becomes available, a previously released version
15+
# can be released using that new Scala version by creating a new tag containing the Scala and the
16+
# JVM version after hashes, e.g., v1.2.3#2.13.0-M1#8. The JVM version needs to be listed in
17+
# `.travis.yml`, otherwise the required build doesn't run.
18+
19+
verPat="[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9-]+)?"
20+
tagPat="^v$verPat(#$verPat#[0-9]+)?$"
21+
22+
if [[ "$TRAVIS_TAG" =~ $tagPat ]]; then
23+
currentJvmVer=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | sed 's/^1\.//' | sed 's/[^0-9].*//')
24+
25+
tagVer=$(echo $TRAVIS_TAG | sed s/#.*// | sed s/^v//)
26+
publishVersion='set every version := "'$tagVer'"'
27+
28+
scalaAndJvmVer=$(echo $TRAVIS_TAG | sed s/[^#]*// | sed s/^#//)
29+
if [ "$scalaAndJvmVer" != "" ]; then
30+
scalaVer=$(echo $scalaAndJvmVer | sed s/#.*//)
31+
jvmVer=$(echo $scalaAndJvmVer | sed s/[^#]*// | sed s/^#//)
32+
if [ "$jvmVer" != "$currentJvmVer" ]; then
33+
echo "Not publishing $TRAVIS_TAG on Java version $currentJvmVer."
34+
exit 0
35+
fi
36+
publishScalaVersion='set every ScalaModulePlugin.scalaVersionsByJvm := Map('$jvmVer' -> List("'$scalaVer'" -> true))'
37+
echo "Releasing $tagVer using Scala $scalaVer on Java version $jvmVer."
38+
else
39+
echo "Releasing $tagVer on Java version $currentJvmVer according to 'scalaVersionsByJvm' in build.sbt."
40+
fi
941
10-
if [[ "$TRAVIS_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9-]+)? ]]; then
11-
echo "Going to release from tag $TRAVIS_TAG!"
12-
myVer=$(echo $TRAVIS_TAG | sed -e s/^v//)
13-
publishVersion='set every version := "'$myVer'"'
1442
extraTarget="+publish-signed"
1543
cat admin/gpg.sbt >> project/plugins.sbt
1644
cp admin/publish-settings.sbt .
@@ -22,4 +50,4 @@ if [[ "$TRAVIS_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9-]+)? ]]; then
2250
openssl aes-256-cbc -K $K -iv $IV -in admin/secring.asc.enc -out admin/secring.asc -d
2351
fi
2452
25-
sbt "$publishVersion" clean update +test +publishLocal $extraTarget
53+
sbt "$publishVersion" "$publishScalaVersion" clean update +test +publishLocal $extraTarget

build.sbt

+40-26
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,53 @@
1-
import com.typesafe.tools.mima.plugin.{MimaPlugin, MimaKeys}
2-
3-
scalaVersion in ThisBuild := crossScalaVersions.value.head
4-
crossScalaVersions in ThisBuild := {
5-
val java = System.getProperty("java.version")
6-
if (java.startsWith("1.6.") || java.startsWith("1.7."))
7-
Seq("2.11.8")
8-
else if (java.startsWith("1.8.") || java.startsWith("1.9."))
9-
Seq("2.12.1")
10-
else
11-
sys.error(s"don't know what Scala versions to build on $java")
1+
import ScalaModulePlugin._
2+
3+
scalaVersionsByJvm in ThisBuild := {
4+
val v211 = "2.11.11"
5+
val v212 = "2.12.3"
6+
val v213 = "2.13.0-M2"
7+
Map(
8+
6 -> List(v211 -> true),
9+
7 -> List(v211 -> false),
10+
8 -> List(v212 -> true, v213 -> true, v211 -> false),
11+
9 -> List(v212 -> false, v213 -> false, v211 -> false))
1212
}
1313

1414
lazy val root = project.in(file("."))
1515
.aggregate(xmlJS, xmlJVM)
16-
.settings(publish := {}, publishLocal := {})
16+
.settings(disablePublishing)
1717

1818
lazy val xml = crossProject.in(file("."))
19+
.settings(scalaModuleSettings)
20+
.jvmSettings(scalaModuleSettingsJVM)
1921
.settings(
2022
name := "scala-xml",
21-
version := "1.0.6-SNAPSHOT",
23+
version := "1.1.0-SNAPSHOT",
24+
2225
scalacOptions ++= "-deprecation:false -feature -Xlint:-stars-align,-nullary-unit,_".split("\\s+").to[Seq],
23-
scalacOptions in Test += "-Xxml:coalescing")
26+
scalacOptions in Test += "-Xxml:coalescing",
27+
28+
apiMappings ++= Map(
29+
scalaInstance.value.libraryJar
30+
-> url(s"http://www.scala-lang.org/api/${scalaVersion.value}/"),
31+
// http://stackoverflow.com/questions/16934488
32+
file(System.getProperty("sun.boot.class.path").split(java.io.File.pathSeparator).filter(_.endsWith(java.io.File.separator + "rt.jar")).head)
33+
-> url("http://docs.oracle.com/javase/8/docs/api")
34+
)
35+
)
2436
.jvmSettings(
25-
scalaModuleSettings ++
26-
scalaModuleOsgiSettings ++
27-
List(
28-
OsgiKeys.exportPackage := Seq(s"scala.xml.*;version=${version.value}"),
29-
libraryDependencies += "junit" % "junit" % "4.11" % "test",
30-
libraryDependencies += "com.novocode" % "junit-interface" % "0.10" % "test",
31-
libraryDependencies += ("org.scala-lang" % "scala-compiler" % scalaVersion.value % "test").exclude("org.scala-lang.modules", s"scala-xml*"),
32-
mimaPreviousVersion := Some("1.0.5"),
33-
// You cannot disable JVM test forking when working on scala modules
34-
// that are distributed with the compiler because of an SBT
35-
// classloader leaking issue (scala/scala-xml#20 and #112).
36-
fork in Test := true): _*)
37+
OsgiKeys.exportPackage := Seq(s"scala.xml.*;version=${version.value}"),
38+
39+
// there is currently no previous released JS version, therefore MiMa is enabled only on JVM
40+
mimaPreviousVersion := Some("1.0.6"),
41+
42+
libraryDependencies += "junit" % "junit" % "4.11" % "test",
43+
libraryDependencies += "com.novocode" % "junit-interface" % "0.10" % "test",
44+
libraryDependencies += "org.apache.commons" % "commons-lang3" % "3.5" % "test",
45+
libraryDependencies += ("org.scala-lang" % "scala-compiler" % scalaVersion.value % "test").exclude("org.scala-lang.modules", s"scala-xml_${scalaVersion.value}")
46+
)
47+
.jsSettings(
48+
// Scala.js cannot run forked tests
49+
fork in Test := false
50+
)
3751
.jsConfigure(_.enablePlugins(ScalaJSJUnitPlugin))
3852

3953
lazy val xmlJVM = xml.jvm

js/src/test/scala/scala/xml/ReuseNodesTest.scala

-58
This file was deleted.

js/src/test/scala/scala/xml/pull/XMLEventReaderTest.scala

-19
This file was deleted.

0 commit comments

Comments
 (0)