Skip to content
Permalink
Browse files

Version 2.6.0 (2019-09-13)

RemoteFS allow reading file history
  • Loading branch information...
pheyse committed Sep 16, 2019
1 parent 58738cd commit c7dae32f350c597a988f94153ebfc8857772dff4
Showing with 16,272 additions and 0 deletions.
  1. +38 −0 .classpath
  2. +23 −0 .project
  3. +6 −0 .settings/org.eclipse.core.resources.prefs
  4. +8 −0 .settings/org.eclipse.jdt.core.prefs
  5. +4 −0 .settings/org.eclipse.m2e.core.prefs
  6. +114 −0 README.md
  7. +31 −0 build.xml
  8. BIN doc/FSF_info.odp
  9. +8 −0 doc/maven_info.txt
  10. +8 −0 doc/testing_info.txt
  11. BIN libs/beam-1.0.1.jar
  12. +105 −0 pom.xml
  13. +18 −0 scripts/BackupB-FileSystemFacade.bat
  14. +18 −0 scripts/BackupV-FileSystemFacade.bat
  15. +164 −0 src/main/java/de/bright_side/filesystemfacade/databasefs/DatabaseFS.java
  16. +141 −0 src/main/java/de/bright_side/filesystemfacade/databasefs/DatabaseFSConfig.java
  17. +471 −0 src/main/java/de/bright_side/filesystemfacade/databasefs/DatabaseFSUtil.java
  18. +691 −0 src/main/java/de/bright_side/filesystemfacade/databasefs/DatabaseFile.java
  19. +11 −0 src/main/java/de/bright_side/filesystemfacade/databasefs/ResultSetProcessor.java
  20. +355 −0 src/main/java/de/bright_side/filesystemfacade/encryptedfs/EncryptedFS.java
  21. +411 −0 src/main/java/de/bright_side/filesystemfacade/encryptedfs/EncryptedFile.java
  22. +9 −0 src/main/java/de/bright_side/filesystemfacade/facade/FSFEnvironment.java
  23. +235 −0 src/main/java/de/bright_side/filesystemfacade/facade/FSFFile.java
  24. +284 −0 src/main/java/de/bright_side/filesystemfacade/facade/FSFFileWithInnerFile.java
  25. +13 −0 src/main/java/de/bright_side/filesystemfacade/facade/FSFSystem.java
  26. +15 −0 src/main/java/de/bright_side/filesystemfacade/facade/IllegalPathItemNameException.java
  27. +33 −0 src/main/java/de/bright_side/filesystemfacade/facade/VersionedData.java
  28. +15 −0 src/main/java/de/bright_side/filesystemfacade/facade/WrongVersionException.java
  29. +129 −0 src/main/java/de/bright_side/filesystemfacade/historyfs/HistoryFS.java
  30. +686 −0 src/main/java/de/bright_side/filesystemfacade/historyfs/HistoryFile.java
  31. +123 −0 src/main/java/de/bright_side/filesystemfacade/memoryfs/MemoryFS.java
  32. +64 −0 src/main/java/de/bright_side/filesystemfacade/memoryfs/MemoryFSItem.java
  33. +45 −0 src/main/java/de/bright_side/filesystemfacade/memoryfs/MemoryFSUtil.java
  34. +480 −0 src/main/java/de/bright_side/filesystemfacade/memoryfs/MemoryFile.java
  35. +46 −0 src/main/java/de/bright_side/filesystemfacade/memoryfs/MemoryFileOutputStream.java
  36. +35 −0 src/main/java/de/bright_side/filesystemfacade/nativefs/NativeFS.java
  37. +429 −0 src/main/java/de/bright_side/filesystemfacade/nativefs/NativeFile.java
  38. +197 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFS.java
  39. +48 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFSAuthenticationException.java
  40. +17 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFSConnectionProvider.java
  41. +12 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFSFSystemProvider.java
  42. +14 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFSRemoteException.java
  43. +52 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFSRequest.java
  44. +194 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFSResponder.java
  45. +94 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFSResponse.java
  46. +106 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFSServletConnectionProvider.java
  47. +100 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFSUtil.java
  48. +405 −0 src/main/java/de/bright_side/filesystemfacade/remotefs/RemoteFile.java
  49. +130 −0 src/main/java/de/bright_side/filesystemfacade/subdirfs/SubDirFS.java
  50. +106 −0 src/main/java/de/bright_side/filesystemfacade/subdirfs/SubDirFile.java
  51. +584 −0 src/main/java/de/bright_side/filesystemfacade/util/FSFFileUtil.java
  52. +44 −0 src/main/java/de/bright_side/filesystemfacade/util/ListDirFormatting.java
  53. +25 −0 src/main/java/de/bright_side/filesystemfacade/util/SimpleFSFEnvironment.java
  54. +45 −0 src/test/java/de/bright_side/filesystemfacade/databasefs/DatabaseFSTestUtil.java
  55. +84 −0 src/test/java/de/bright_side/filesystemfacade/encryptedfs/GeneralEncryptedFSInMemoryTest.java
  56. +152 −0 ...st/java/de/bright_side/filesystemfacade/encryptedfs/GeneralEncryptedRemoteWithVersionsFSTest.java
  57. +91 −0 ...test/java/de/bright_side/filesystemfacade/encryptedfs/GeneralEncryptedVersionsFSInMemoryTest.java
  58. +2,753 −0 src/test/java/de/bright_side/filesystemfacade/facade/GeneralFSTest.java
  59. +45 −0 src/test/java/de/bright_side/filesystemfacade/facade/ListDirItem.java
  60. +168 −0 src/test/java/de/bright_side/filesystemfacade/facade/TestUtil.java
  61. +131 −0 src/test/java/de/bright_side/filesystemfacade/facade/TestUtilTest.java
  62. +85 −0 ...java/de/bright_side/filesystemfacade/historyfs/GeneralHistoryNoVersionsEncryptedMemoryFSTest.java
  63. +76 −0 src/test/java/de/bright_side/filesystemfacade/historyfs/GeneralHistoryNoVersionsMemoryFSTest.java
  64. +74 −0 src/test/java/de/bright_side/filesystemfacade/historyfs/GeneralHistoryOnlyVersionsMemoryFSTest.java
  65. +84 −0 ...va/de/bright_side/filesystemfacade/historyfs/GeneralHistoryWithVersionsEncryptedMemoryFSTest.java
  66. +76 −0 src/test/java/de/bright_side/filesystemfacade/historyfs/GeneralHistoryWithVersionsMemoryFSTest.java
  67. +82 −0 .../java/de/bright_side/filesystemfacade/historyfs/GeneralHistoryWithVersionsSubDirMemoryFSTest.java
  68. +1,605 −0 src/test/java/de/bright_side/filesystemfacade/historyfs/HistoryFileTest.java
  69. +74 −0 src/test/java/de/bright_side/filesystemfacade/memoryfs/GeneralMemoryFSTest.java
  70. +836 −0 src/test/java/de/bright_side/filesystemfacade/memoryfs/MemoryFileTest.java
  71. +135 −0 src/test/java/de/bright_side/filesystemfacade/remotefs/GeneralRemoteMemoryFSTest.java
  72. +143 −0 src/test/java/de/bright_side/filesystemfacade/remotefs/GeneralRemoteVersioningMemoryFSTest.java
  73. +83 −0 src/test/java/de/bright_side/filesystemfacade/subdirfs/GeneralSubDirFSInMemoryTest.java
  74. +86 −0 src/test/java/de/bright_side/filesystemfacade/subdirfs/SubDirFSTest.java
  75. +35 −0 src/test/java/de/bright_side/filesystemfacade/util/FSFFileUtilTest.java
  76. +42 −0 src/test/java/de/bright_side/filesystemfacade_it/databasefs/DatabaseFSIT.java
  77. +163 −0 src/test/java/de/bright_side/filesystemfacade_it/databasefs/DatabaseFSUtilIT.java
  78. +121 −0 src/test/java/de/bright_side/filesystemfacade_it/databasefs/GeneralDatabaseFSWithConnectionIT.java
  79. +164 −0 src/test/java/de/bright_side/filesystemfacade_it/databasefs/GeneralDatabaseFSWithCredentialsIT.java
  80. +102 −0 src/test/java/de/bright_side/filesystemfacade_it/databasefs/GeneralEncryptedFSInDatabaseFSIT.java
  81. +94 −0 ...st/java/de/bright_side/filesystemfacade_it/databasefs/GeneralHistoryWithVersionsDatabaseFSIT.java
  82. +157 −0 src/test/java/de/bright_side/filesystemfacade_it/databasefs/GeneralRemoteDatabaseFSIT.java
  83. +170 −0 src/test/java/de/bright_side/filesystemfacade_it/databasefs/GeneralRemoteHistoryDatabaseFSIT.java
  84. +100 −0 src/test/java/de/bright_side/filesystemfacade_it/databasefs/GeneralSubDirFSInDatabaseFSIT.java
  85. +168 −0 src/test/java/de/bright_side/filesystemfacade_it/nativefs/NativeFileIT.java
  86. +106 −0 src/test/java/de/bright_side/filesystemfacade_it/nativefs/NativeFileTestBase.java
  87. +174 −0 src/test/java/de/bright_side/filesystemfacade_it/nativefs/NativeFileWithEncryptionAndHistoryIT.java
  88. +229 −0 src/test/java/de/bright_side/filesystemfacade_it/remotefs/RemoteServletIT.java
  89. +145 −0 src/test/java/de/bright_side/filesystemfacade_it/remotefs/RemoteServletWithEncryptionIT.java
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="test" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>filesystemfacade</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,6 @@
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/main/resources=UTF-8
encoding//src/test/java=UTF-8
encoding//src/test/resources=UTF-8
encoding/<project>=UTF-8
@@ -0,0 +1,8 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8
@@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
114 README.md
@@ -1,2 +1,116 @@
# FileSystemFacade
A facade to different file system types such as Native (like java.io.File), in memory, database, server, history, sub-directory and encrypted as well as combinations of these.

Created 2017-2019 by Philip Heyse

## License
Apace V2

## Featuers
- FileSystemFacade (FSF) allows you to write unit tests simulating the regular file system in memory. All tests can run in parallel without any interference. With the change of one line of code / calling a different init-method the actual native file system (java.io.File) is used
- Instead of a normal local file system, the files may also be located in a database on a different server (RemoteFS) which is called via a Java servlet. The behavior of the file system stays the same
- Additional features can be added to the file system by basing one file system onto another.
- File systems may be encrypted by using EnryptionFS with a different inner file system (e.g. NativeFS, MemoryFS, DatabaseFS, RemoteFS)
- File systems may have version logic by using HistroyFS with a different inner file system. Each file then has a version property and you can enforce that only the next version of a file may be written - avoiding cases where two different instances each attempt to write the next version causing data inconsistencies.
- File systems may have a limited or infinite number of history entries each time a file or directory is changed or deleted, also by using HistoryFS.
- File systems may be limited to only a specific sub-directory to provide an app from writing "outside" of it's designated data folder in case of a malfunction or an attack.
- It is possible to copy from one file system to another. Examples: copy from MemoryFS to the NativeFS after a failed unit test, copy from RemoteFS or DatabaseFS to a NativeFS for backup.

## Usage
### Native file system with behavior similar to java.io.File
```java
FSFSystem fs = new NativeFS();
FSFFile myDir = fs.createByPath("C:\data\my_dir");
FSFFile myTextFile = myDir.getChild("myText.txt");
String text = myTextFile.readString(); //: read file as UTF-8 text
```

### In-memory file system
```java
FSFSystem fs = new MemoryFS();
FSFFile myDir = fs.createByPath("/data/my_dir");
FSFFile myTextFile = myDir.getChild("myText.txt");
String text = myTextFile.readString(); //: read file as UTF-8 text
```

### Operations with different file systems
```java
private static fianl int FSF_TYPE = 3;
public FSFFile getAppDir(int type) throws Exception {
String password = "myPassword";
switch (type) {
case 1:
return new NativeFS().createByPath("C:\\my_data\\app1");
case 2:
return new NativeFS().createByPath("/usr/local/app1");
case 3:
return new MemoryFS().createByPath("/data");
case 4:
FSFSystem innerFS = new MemoryFS();
innerFS.createByPath("/data").mkdirs();
return new EncryptedFS(innerFS, password, "/data").createByPath("/encrypetd");
case 5:
new RemoteFS("/", "myApp", "myTennant", "myUser", "myPassword", "https://myserver.com/remoteFS").createByPath("/data");
case 6:
new DatabaseFS(createDatabaseConfig()).createByPath("/data");
case 7:
new HistoryFS(new MemoryFS(), true).createByPath("/data");
case 8:
new HistoryFS(new NativeFS(), true).createByPath("C:\\my_data\\app1");
case 9:
new SubDirFS(new NativeFS(), "/usr/local/app1").createByPath("/");
default:
throw new Exception("Unexpected type: " + type);
}
}
public void static void main(String[] args){
// depending on the type constant a different file system type is returned.
FSFFile appDir = getAppDir(FSF_TYPE);
// all following actions can be performed whichever file system type was chosen:
appDir.mkDirs();
appDir.getChild("textOutput").mkDir().getChild("mytext.txt").writeString("hello!");
FSFFile file = appDir.getChild("MyFile.txt").writeString("nice");
file.renameTo("newName.txt");
List<FSFFile> allFiles = appDir.listFilesTree();
for (FSFFile i: allFiles){
System.out.println("Name = '" + i.getName() + "'");
System.out.println("Path = '" + i.getAbsolutePath() + "'");
System.out.println("Length = '" + i.getLength() + "'");
}
file.delete();
}
```


## Change History
Version 2.3.0 (2019-08-03)
- encryption via the BEAM module

Version 2.4.0 (2019-08-07)
- added feature SubDirFS

Version 2.4.1 (2019-08-20)
- with RemoteFS allows copyTo to a different FS

Version 2.4.2 (2019-08-20)
- bugfix copy files tree for history FS

Version 2.5.0 (2019-09-06)
- EncryptedFS allows versions and works with inner RemoteFS

Version 2.5.1 (2019-09-07)
- EncryptedFS performance improvement - especially for RemoteFS

Version 2.5.2 (2019-09-12)
- updated to BEAM 1.0.1 which does not need external XML library to read/write hex-string and works with Android

Version 2.6.0 (2019-09-13)
- RemoteFS allow reading file history
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="jar" name="FSF jar">
<target name="jar">
<!-- version 2.3.0: with encryption (2019-08-03) -->
<!-- version 2.4.0: with SubDirFS (2019-08-07) -->
<!-- version 2.4.1: with RemoteFS allows copyTo to a different FS (2019-08-20) -->
<!-- version 2.4.2: bugfix copy files tree for history FS (2019-08-20) -->
<!-- version 2.5.0: EncryptedFS allows versions and works with inner RemoteFS (2019-09-06) -->
<!-- version 2.5.1: EncryptedFS performance improvement - especially for RemoteFS (2019-09-07) -->
<!-- version 2.5.2: updated to BEAM 1.0.1 which does not need external XML library to read/write hex-string (2019-09-12) -->
<!-- version 2.6.0: RemoteFS allow reading file history (2019-09-13) -->
<property name="jarname" value="FileSystemFacade_02_06_00.jar"/>
<jar destfile="dist/${jarname}" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Class-Path" value="."/>
</manifest>
<fileset dir="./bin"/>
</jar>
<!--
<copyfile src="dist/${jarname}" dest="C:\Philip\Development\Android\Fonotes\fonotes\JavaProject\libs\${jarname}"/>
<copyfile src="dist/${jarname}" dest="C:\Philip\Development\Android\Fonotes\fonotes\AndroidProject\app\libs\${jarname}"/>
<copyfile src="dist/${jarname}" dest="C:\Philip\Development\Android\BugJockey\PCProject\libs\${jarname}"/>
<copyfile src="dist/${jarname}" dest="C:\Philip\Development\Android\BugJockey\AndroidProject\app\libs\${jarname}"/>
-->



</target>
</project>
BIN +16.5 KB doc/FSF_info.odp
Binary file not shown.
@@ -0,0 +1,8 @@
install BEAM jar file (located in the libs dir) which is required for the projects:
Maven goal: "clean"

create jar file without running integration tests:
Maven goal: "package"

Running integration-test (which require DB connection, write to local file system, require a remote connection):
Maven goal: "integration-test"
@@ -0,0 +1,8 @@
All tests:
just run JUnit on src/test/java

Test only integration tests:
filter to only include tag "IT"

Test only unit tests:
filter to exclude tag "IT"
BIN +23.4 KB libs/beam-1.0.1.jar
Binary file not shown.
105 pom.xml
@@ -0,0 +1,105 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.bright_side.filesystemfacade</groupId>
<artifactId>filesystemfacade</artifactId>
<version>2.6.0</version>
<name>FileSystemFacade</name>
<description>A facade for different file systems</description>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>de.bright_side.beam</groupId>
<artifactId>beam</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>

<!--INFO: Add local jars that are not in official Maven repository, but
in the local libs folder{ -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>de.bright_side.beam-beam</id>
<phase>clean</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>${basedir}/libs/beam-1.0.1.jar</file>
<groupId>de.bright_side.beam</groupId>
<artifactId>beam</artifactId>
<version>1.0.1</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
<!--INFO: Add local jars } -->


<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>


</plugins>
</build>

</project>
@@ -0,0 +1,18 @@
@echo off
set sevenzip=C:\Program Files\7-Zip\7z.exe
set projectname=FileSystemFacade_L
set dirtozip=C:\Philip\Development\Java\FileSystemFacade
set outputdir=B:\Daily\CopyOrZip


FOR /f %%a in ('WMIC OS GET LocalDateTime ^| find "."') DO set wmic_time=%%a
set timestamp=%wmic_time:~0,4%_%wmic_time:~4,2%_%wmic_time:~6,2%__%wmic_time:~8,2%_%wmic_time:~10,2%


set filename=%projectname%__%timestamp%.7z
echo filename is '%filename%'
echo 7zip is '%sevenzip%'
set command="%sevenzip%" a "%outputdir%\%filename%" "%dirtozip%" "-xr!*.class" "-xr!*.dex" "-xr!*.bin"
echo command is '%command%'
%command%
pause
@@ -0,0 +1,18 @@
@echo off
set sevenzip=C:\Program Files\7-Zip\7z.exe
set projectname=FileSystemFacade_L
set dirtozip=C:\Philip\Development\Java\FileSystemFacade
set outputdir=V:\Backup


FOR /f %%a in ('WMIC OS GET LocalDateTime ^| find "."') DO set wmic_time=%%a
set timestamp=%wmic_time:~0,4%_%wmic_time:~4,2%_%wmic_time:~6,2%__%wmic_time:~8,2%_%wmic_time:~10,2%


set filename=%projectname%__%timestamp%.7z
echo filename is '%filename%'
echo 7zip is '%sevenzip%'
set command="%sevenzip%" a "%outputdir%\%filename%" "%dirtozip%" "-xr!*.class" "-xr!*.dex" "-xr!*.bin"
echo command is '%command%'
%command%
pause

0 comments on commit c7dae32

Please sign in to comment.
You can’t perform that action at this time.