Skip to content

Commit cec55d4

Browse files
committed
Merge branch 'master' into develop
# Conflicts: # build.gradle # src/main/java/org/scm4j/vcs/svn/SVNVCS.java
2 parents c6b1d0c + 2c53a9f commit cec55d4

File tree

11 files changed

+334
-432
lines changed

11 files changed

+334
-432
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ hs_err_pid*
1414
/gradle
1515
build
1616
bin
17-
/pk-vcs-svn_gradle.launch
17+
*.iml

README.md

Lines changed: 67 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,67 @@
1-
[![Release](https://jitpack.io/v/ProjectKaiser/pk-vcs-svn.svg)](https://jitpack.io/#ProjectKaiser/pk-vcs-svn)
2-
3-
# Overview
4-
Pk-vcs-svn is lightweight library for execute basic SVN VCS operations (merge, branch create etc). It uses [pk-vcs-api](https://github.com/ProjectKaiser/pk-vcs-api) exposing IVCS implementation for SVN repositories and [SVNKit](https://svnkit.com/) as framework to work with SVN repositories.
5-
Features:
6-
- Branch create and remove
7-
- Branch merge returning result(success or list of conflicted files)
8-
- Commit messages list
9-
- Summarized diff between branches
10-
- Branches list
11-
- File content getting and setting
12-
- File create and remove
13-
14-
# Terms
15-
- Workspace Home
16-
- Home folder of all folders used by vcs-related operations. See [pk-vcs-api](https://github.com/ProjectKaiser/pk-vcs-api) for details
17-
- Repository Workspace
18-
- Folder for LWC folders related to Repository of one type. See [pk-vcs-api](https://github.com/ProjectKaiser/pk-vcs-api) for details
19-
- Locked Working Copy, LWC
20-
- Folder where vcs-related operations are executed. Provides thread- and process-safe repository of working folders. See [pk-vcs-api](https://github.com/ProjectKaiser/pk-vcs-api) for details
21-
- Test Repository
22-
- A SVN repository used for functional testing
23-
- Local file system is used, no dedicated server
24-
- Creates new before and deletes after each test
25-
- Named randomly (uuid is used)
26-
27-
# Using pk-vcs-svn
28-
- Add github-hosted pk-vcs-svn project as maven dependency using [jitpack.io](https://jitpack.io/). As an example, add following to gradle.build file:
29-
```gradle
30-
allprojects {
31-
repositories {
32-
maven { url "https://jitpack.io" }
33-
}
34-
}
35-
36-
dependencies {
37-
compile 'com.github.ProjectKaiser:pk-vcs-svn:master-SNAPSHOT'
38-
}
39-
```
40-
- Create Workspace Home instance providing path to any folder as Workspace Home folder path. This folder will contain repositories folders (if different vcs or repositories are used)
41-
```java
42-
public static final String WORKSPACE_DIR = System.getProperty("java.io.tmpdir") + "git-workspaces";
43-
...
44-
IVCSWorkspace workspace = new VCSWorkspace(WORKSPACE_DIR);
45-
...
46-
```
47-
- Obtain Repository Workspace from Workspace Home providing a certain Repository's url. The obtained Repository Workspace will represent a folder within Workspace Home dir which will contain all Working Copies relating to the provided VCS Repository
48-
```java
49-
String repoUrl = "https://github.com/ProjectKaiser/pk-vcs-api";
50-
IVCSRepositoryWorkspace repoWorkspace = workspace.getVCSRepositoryWorkspace(repoUrl);
51-
```
52-
- Create `SVNVCS` instance providing Repository Workspace, username and password for Repository
53-
```java
54-
IVCS vcs = new SVNVCS(repoWorkspace, username, pass);
55-
```
56-
- Use methods of `IVCS` interface. See [pk-vcs-api](https://github.com/ProjectKaiser/pk-vcs-api) for details
57-
- Use `vcs.setProxy()` and `vcs.setCredentials()` if necessary
58-
59-
# Implementation details
60-
- [SVNKit](https://svnkit.com/) is used for manage SVN repositories
61-
- LWC is obtained automatically when necessary
62-
63-
# Functional testing
64-
- To execute tests just run SVNVCSTest class as JUnit test. Tests from VCSAbstractTest class will be executed. See [pk-vcs-test](https://github.com/ProjectKaiser/pk-vcs-test) for details
65-
66-
# Limitations
67-
- According to IVCS description `IVCS.getBranches()` should return list of user-created branches. But a branch and a dir are the same for SVN. So `SVNVCS.getBranches()` returns set of first level folders of "Branches/" branch and "Trunk" branch. I.e.:
68-
- Assume we have following directory structure:
69-
- Branches/Br1/Folder/file.txt
70-
- Branches/Br2/Folder/file.txt
71-
- Trunk/Folder/file.txt
72-
- Tags/Tag1/
73-
- Then `SVNVCS.getBranches()` method will return [Br1, Br2, Trunk]
1+
[![Release](https://jitpack.io/v/scm4j/scm4j-vcs-svn.svg)](https://jitpack.io/#scm4j/scm4j-vcs-svn)
2+
3+
# Overview
4+
scm4j-vcs-svn is lightweight library for execute basic SVN VCS operations (merge, branch create etc). It uses [scm4j-vcs-api](https://github.com/scm4j/scm4j-vcs-api) exposing IVCS implementation for SVN repositories and [SVNKit](https://svnkit.com/) as framework to work with SVN repositories.
5+
Features:
6+
- Branch create and remove
7+
- Branch merge returning result(success or list of conflicted files)
8+
- Commit messages list
9+
- Summarized diff between branches
10+
- Branches list
11+
- File content getting and setting
12+
- File create and remove
13+
14+
# Terms
15+
- Workspace Home
16+
- Local home folder of all folders used by vcs-related operations. See [scm4j-vcs-api](https://github.com/scm4j/scm4j-vcs-api) for details
17+
- Repository Workspace
18+
- Local folder for LWC folders related to Repository of one type. See [scm4j-vcs-api](https://github.com/scm4j/scm4j-vcs-api) for details
19+
- Locked Working Copy, LWC
20+
- Local folder where vcs-related operations are executed. Provides thread- and process-safe repository of working folders. See [scm4j-vcs-api](https://github.com/scm4j/scm4j-vcs-api) for details
21+
- Test Repository
22+
- A local file-based SVN repository used for functional testing
23+
- Creates new before and deletes after each test automatically
24+
- Named randomly (uuid is used)
25+
26+
# Using scm4j-vcs-svn
27+
- Add github-hosted scm4j-vcs-svn project as maven dependency using [jitpack.io](https://jitpack.io/). As an example, add following to gradle.build file:
28+
```gradle
29+
allprojects {
30+
repositories {
31+
maven { url "https://jitpack.io" }
32+
}
33+
}
34+
35+
dependencies {
36+
// versioning: master-SNAPSHOT (lastest build, unstable), + (lastest release, stable) or certain version (e.g. 1.1)
37+
compile 'com.github.scm4j:scm4j-vcs-svn:+'
38+
}
39+
```
40+
Or download release jars from https://github.com/scm4j/scm4j-vcs-svn/releases
41+
- Code snippet
42+
```java
43+
public static final String WORKSPACE_DIR = System.getProperty("java.io.tmpdir") + "svn-workspaces";
44+
IVCSWorkspace workspace = new VCSWorkspace(WORKSPACE_DIR);
45+
String repoUrl = "https://github.com/MyUser/MyRepo";
46+
IVCSRepositoryWorkspace repoWorkspace = workspace.getVCSRepositoryWorkspace(repoUrl);
47+
IVCS vcs = new SVNVCS(repoWorkspace, "username", "pass");
48+
```
49+
- Use methods of `IVCS` interface. See [scm4j-vcs-api](https://github.com/scm4j/scm4j-vcs-api) for details
50+
- Use `vcs.setProxy()` and `vcs.setCredentials()` if necessary
51+
52+
# Implementation details
53+
- [SVNKit](https://svnkit.com/) is used for manage SVN repositories
54+
- LWC is obtained automatically when necessary
55+
56+
# Functional testing
57+
- To execute tests just run SVNVCSTest class as JUnit test. Tests from VCSAbstractTest class will be executed. See [scm4j-vcs-test](https://github.com/scm4j/scm4j-vcs-test) for details
58+
- Or run `gradle test`
59+
60+
# Limitations
61+
- According to IVCS description `IVCS.getBranches()` should return list of user-created branches. But a branch and a dir are the same for SVN. So `SVNVCS.getBranches()` returns set of first level folders of "Branches/" branch and "Trunk" branch. I.e.:
62+
- Assume we have following directory structure:
63+
- Branches/Br1/Folder/file.txt
64+
- Branches/Br2/Folder/file.txt
65+
- Trunk/Folder/file.txt
66+
- Tags/Tag1/
67+
- Then `SVNVCS.getBranches()` method will return [Br1, Br2, Trunk]

build.gradle

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ apply plugin: 'eclipse'
55
sourceCompatibility = JavaVersion.VERSION_1_7
66
targetCompatibility = JavaVersion.VERSION_1_7
77

8-
group = 'com.projectkaiser.scm'
9-
version = '1.0-SNAPSHOT'
8+
group = 'org.scm4j'
9+
version = '3.0-SNAPSHOT'
1010

1111
repositories {
1212
mavenCentral()
@@ -18,12 +18,11 @@ repositories {
1818
defaultTasks 'build';
1919

2020
dependencies {
21-
compile 'com.github.ProjectKaiser:pk-vcs-api:master-SNAPSHOT'
21+
compile 'com.github.scm4j:scm4j-vcs-api:master-SNAPSHOT'
2222
compile 'org.tmatesoft.svnkit:svnkit:1.8.6'
23-
compile 'commons-logging:commons-logging:1.2'
2423

2524
testCompile 'junit:junit:4.12'
26-
testCompile 'com.github.ProjectKaiser:pk-vcs-test:master-SNAPSHOT'
25+
testCompile 'com.github.scm4j:scm4j-vcs-test:master-SNAPSHOT'
2726
testCompile 'org.mockito:mockito-core:2.0.62-beta'
2827
}
2928

gradle/wrapper/gradle-wrapper.jar

52.9 KB
Binary file not shown.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#Fri Apr 07 15:40:18 GMT+03:00 2017
2+
distributionBase=GRADLE_USER_HOME
3+
distributionPath=wrapper/dists
4+
zipStoreBase=GRADLE_USER_HOME
5+
zipStorePath=wrapper/dists
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-3.4-bin.zip

gradlew

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,35 @@
1-
#!/usr/bin/env bash
1+
#!/usr/bin/env sh
22

33
##############################################################################
44
##
55
## Gradle start up script for UN*X
66
##
77
##############################################################################
88

9-
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10-
DEFAULT_JVM_OPTS=""
9+
# Attempt to set APP_HOME
10+
# Resolve links: $0 may be a link
11+
PRG="$0"
12+
# Need this for relative symlinks.
13+
while [ -h "$PRG" ] ; do
14+
ls=`ls -ld "$PRG"`
15+
link=`expr "$ls" : '.*-> \(.*\)$'`
16+
if expr "$link" : '/.*' > /dev/null; then
17+
PRG="$link"
18+
else
19+
PRG=`dirname "$PRG"`"/$link"
20+
fi
21+
done
22+
SAVED="`pwd`"
23+
cd "`dirname \"$PRG\"`/" >/dev/null
24+
APP_HOME="`pwd -P`"
25+
cd "$SAVED" >/dev/null
1126

1227
APP_NAME="Gradle"
1328
APP_BASE_NAME=`basename "$0"`
1429

30+
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31+
DEFAULT_JVM_OPTS=""
32+
1533
# Use the maximum available, or set MAX_FD != -1 to use that value.
1634
MAX_FD="maximum"
1735

@@ -30,6 +48,7 @@ die ( ) {
3048
cygwin=false
3149
msys=false
3250
darwin=false
51+
nonstop=false
3352
case "`uname`" in
3453
CYGWIN* )
3554
cygwin=true
@@ -40,26 +59,11 @@ case "`uname`" in
4059
MINGW* )
4160
msys=true
4261
;;
62+
NONSTOP* )
63+
nonstop=true
64+
;;
4365
esac
4466

45-
# Attempt to set APP_HOME
46-
# Resolve links: $0 may be a link
47-
PRG="$0"
48-
# Need this for relative symlinks.
49-
while [ -h "$PRG" ] ; do
50-
ls=`ls -ld "$PRG"`
51-
link=`expr "$ls" : '.*-> \(.*\)$'`
52-
if expr "$link" : '/.*' > /dev/null; then
53-
PRG="$link"
54-
else
55-
PRG=`dirname "$PRG"`"/$link"
56-
fi
57-
done
58-
SAVED="`pwd`"
59-
cd "`dirname \"$PRG\"`/" >/dev/null
60-
APP_HOME="`pwd -P`"
61-
cd "$SAVED" >/dev/null
62-
6367
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
6468

6569
# Determine the Java command to use to start the JVM.
@@ -85,7 +89,7 @@ location of your Java installation."
8589
fi
8690

8791
# Increase the maximum file descriptors if we can.
88-
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
92+
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
8993
MAX_FD_LIMIT=`ulimit -H -n`
9094
if [ $? -eq 0 ] ; then
9195
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -150,11 +154,19 @@ if $cygwin ; then
150154
esac
151155
fi
152156

153-
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154-
function splitJvmOpts() {
155-
JVM_OPTS=("$@")
157+
# Escape application args
158+
save ( ) {
159+
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160+
echo " "
156161
}
157-
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158-
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
162+
APP_ARGS=$(save "$@")
163+
164+
# Collect all arguments for the java command, following the shell quoting and substitution rules
165+
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166+
167+
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168+
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169+
cd "$(dirname "$0")"
170+
fi
159171

160-
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
172+
exec "$JAVACMD" "$@"

gradlew.bat

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
@rem Set local scope for the variables with windows NT shell
99
if "%OS%"=="Windows_NT" setlocal
1010

11-
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12-
set DEFAULT_JVM_OPTS=
13-
1411
set DIRNAME=%~dp0
1512
if "%DIRNAME%" == "" set DIRNAME=.
1613
set APP_BASE_NAME=%~n0
1714
set APP_HOME=%DIRNAME%
1815

16+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17+
set DEFAULT_JVM_OPTS=
18+
1919
@rem Find java.exe
2020
if defined JAVA_HOME goto findJavaFromJavaHome
2121

@@ -49,7 +49,6 @@ goto fail
4949
@rem Get command-line arguments, handling Windows variants
5050

5151
if not "%OS%" == "Windows_NT" goto win9xME_args
52-
if "%@eval[2+2]" == "4" goto 4NT_args
5352

5453
:win9xME_args
5554
@rem Slurp the command line arguments.
@@ -60,11 +59,6 @@ set _SKIP=2
6059
if "x%~1" == "x" goto execute
6160

6261
set CMD_LINE_ARGS=%*
63-
goto execute
64-
65-
:4NT_args
66-
@rem Get arguments from the 4NT Shell from JP Software
67-
set CMD_LINE_ARGS=%$
6862

6963
:execute
7064
@rem Setup the command line

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
rootProject.name = 'pk-vcs-svn'
1+
rootProject.name = 'scm4j-vcs-svn'

0 commit comments

Comments
 (0)