Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
FIY695
jenkins
提交
03bd5959
J
jenkins
项目概览
FIY695
/
jenkins
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jenkins
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
03bd5959
编写于
4月 24, 2015
作者:
K
Kanstantsin Shautsou
提交者:
Kanstantsin Shautsou
8月 25, 2015
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Revert "Revert "[JENKINS-10629] - Migrate the Tar archives handling code to commons-compress""
This reverts commit
8f1280a8
.
上级
80abb986
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
33 addition
and
55 deletion
+33
-55
core/pom.xml
core/pom.xml
+5
-0
core/src/main/java/hudson/FilePath.java
core/src/main/java/hudson/FilePath.java
+9
-23
core/src/main/java/hudson/org/apache/tools/tar/TarInputStream.java
...main/java/hudson/org/apache/tools/tar/TarInputStream.java
+2
-1
core/src/main/java/hudson/org/apache/tools/tar/TarOutputStream.java
...ain/java/hudson/org/apache/tools/tar/TarOutputStream.java
+3
-0
core/src/main/java/hudson/util/io/TarArchiver.java
core/src/main/java/hudson/util/io/TarArchiver.java
+14
-31
未找到文件。
core/pom.xml
浏览文件 @
03bd5959
...
...
@@ -276,6 +276,11 @@ THE SOFTWARE.
<artifactId>
commons-beanutils
</artifactId>
<version>
1.8.3
</version>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-compress
</artifactId>
<version>
1.9
</version>
</dependency>
<dependency>
<groupId>
javax.mail
</groupId>
<artifactId>
mail
</artifactId>
...
...
core/src/main/java/hudson/FilePath.java
浏览文件 @
03bd5959
...
...
@@ -33,7 +33,6 @@ import hudson.model.AbstractProject;
import
hudson.model.Computer
;
import
hudson.model.Item
;
import
hudson.model.TaskListener
;
import
hudson.org.apache.tools.tar.TarInputStream
;
import
hudson.os.PosixAPI
;
import
hudson.os.PosixException
;
import
hudson.remoting.Callable
;
...
...
@@ -70,7 +69,6 @@ import org.apache.commons.io.input.CountingInputStream;
import
org.apache.tools.ant.DirectoryScanner
;
import
org.apache.tools.ant.Project
;
import
org.apache.tools.ant.types.FileSet
;
import
org.apache.tools.tar.TarEntry
;
import
org.apache.tools.zip.ZipEntry
;
import
org.apache.tools.zip.ZipFile
;
import
org.kohsuke.stapler.Stapler
;
...
...
@@ -120,6 +118,8 @@ import static hudson.Util.*;
import
javax.annotation.Nonnull
;
import
javax.annotation.Nullable
;
import
jenkins.security.MasterToSlaveCallable
;
import
org.apache.commons.compress.archivers.tar.TarArchiveEntry
;
import
org.apache.commons.compress.archivers.tar.TarArchiveInputStream
;
import
org.jenkinsci.remoting.RoleChecker
;
import
org.jenkinsci.remoting.RoleSensitive
;
...
...
@@ -2268,12 +2268,15 @@ public final class FilePath implements Serializable {
/**
* Reads from a tar stream and stores obtained files to the base dir.
* @since TODO supports large files > 10 GB, migration to commons-compress
*/
private
void
readFromTar
(
String
name
,
File
baseDir
,
InputStream
in
)
throws
IOException
{
TarInputStream
t
=
new
TarInputStream
(
in
);
TarArchiveInputStream
t
=
new
TarArchiveInputStream
(
in
);
// TarInputStream t = new TarInputStream(in);
try
{
TarEntry
te
;
while
((
te
=
t
.
getNextEntry
())
!=
null
)
{
Tar
Archive
Entry
te
;
while
((
te
=
t
.
getNext
Tar
Entry
())
!=
null
)
{
File
f
=
new
File
(
baseDir
,
te
.
getName
());
if
(
te
.
isDirectory
())
{
mkdirs
(
f
);
...
...
@@ -2282,8 +2285,7 @@ public final class FilePath implements Serializable {
if
(
parent
!=
null
)
mkdirs
(
parent
);
writing
(
f
);
byte
linkFlag
=
(
Byte
)
LINKFLAG_FIELD
.
get
(
te
);
if
(
linkFlag
==
TarEntry
.
LF_SYMLINK
)
{
if
(
te
.
isSymbolicLink
())
{
new
FilePath
(
f
).
symlinkTo
(
te
.
getLinkName
(),
TaskListener
.
NULL
);
}
else
{
IOUtils
.
copy
(
t
,
f
);
...
...
@@ -2300,8 +2302,6 @@ public final class FilePath implements Serializable {
}
catch
(
InterruptedException
e
)
{
Thread
.
currentThread
().
interrupt
();
// process this later
throw
new
IOException
(
"Failed to extract "
+
name
,
e
);
}
catch
(
IllegalAccessException
e
)
{
throw
new
IOException
(
"Failed to extract "
+
name
,
e
);
}
finally
{
t
.
close
();
}
...
...
@@ -2725,20 +2725,6 @@ public final class FilePath implements Serializable {
}
};
private
static
final
Field
LINKFLAG_FIELD
=
getTarEntryLinkFlagField
();
private
static
Field
getTarEntryLinkFlagField
()
{
try
{
Field
f
=
TarEntry
.
class
.
getDeclaredField
(
"linkFlag"
);
f
.
setAccessible
(
true
);
return
f
;
}
catch
(
SecurityException
e
)
{
throw
new
AssertionError
(
e
);
}
catch
(
NoSuchFieldException
e
)
{
throw
new
AssertionError
(
e
);
}
}
/**
* Gets the {@link FilePath} representation of the "~" directory
* (User's home directory in the Unix sense) of the given channel.
...
...
core/src/main/java/hudson/org/apache/tools/tar/TarInputStream.java
浏览文件 @
03bd5959
...
...
@@ -37,8 +37,9 @@ import java.io.ByteArrayOutputStream;
* methods are provided to position at each successive entry in
* the archive, and the read each entry as a normal input stream
* using read().
*
*
@deprecated Use {@link org.apache.commons.compress.archivers.tar.TarArchiveInputStream} instead
*/
@Deprecated
public
class
TarInputStream
extends
FilterInputStream
{
// CheckStyle:VisibilityModifier OFF - bc
...
...
core/src/main/java/hudson/org/apache/tools/tar/TarOutputStream.java
浏览文件 @
03bd5959
...
...
@@ -35,8 +35,11 @@ import java.io.IOException;
* The TarOutputStream writes a UNIX tar archive as an OutputStream.
* Methods are provided to put entries, and then write their contents
* by writing to this stream using write().
*
* @deprecated Use {@link org.apache.commons.compress.archivers.tar.TarArchiveOutputStream} instead
*
*/
@Deprecated
public
class
TarOutputStream
extends
FilterOutputStream
{
/** Fail if a long file name is required in the archive. */
public
static
final
int
LONGFILE_ERROR
=
0
;
...
...
core/src/main/java/hudson/util/io/TarArchiver.java
浏览文件 @
03bd5959
...
...
@@ -37,6 +37,8 @@ import java.io.FileInputStream;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.lang.reflect.Field
;
import
org.apache.commons.compress.archivers.tar.TarArchiveEntry
;
import
org.apache.commons.compress.archivers.tar.TarArchiveOutputStream
;
import
static
org
.
apache
.
tools
.
tar
.
TarConstants
.
LF_SYMLINK
;
...
...
@@ -47,10 +49,10 @@ import static org.apache.tools.tar.TarConstants.LF_SYMLINK;
*/
final
class
TarArchiver
extends
Archiver
{
private
final
byte
[]
buf
=
new
byte
[
8192
];
private
final
TarOutputStream
tar
;
private
final
Tar
Archive
OutputStream
tar
;
TarArchiver
(
OutputStream
out
)
{
tar
=
new
TarOutputStream
(
new
BufferedOutputStream
(
out
)
{
tar
=
new
Tar
Archive
OutputStream
(
new
BufferedOutputStream
(
out
)
{
// TarOutputStream uses TarBuffer internally,
// which flushes the stream for each block. this creates unnecessary
// data stream fragmentation, and flush request to a remote, which slows things down.
...
...
@@ -58,13 +60,13 @@ final class TarArchiver extends Archiver {
public
void
flush
()
throws
IOException
{
// so don't do anything in flush
}
});
tar
.
setLongFileMode
(
TarOutputStream
.
LONGFILE_GNU
);
});
tar
.
setLongFileMode
(
Tar
Archive
OutputStream
.
LONGFILE_GNU
);
}
@Override
public
void
visitSymlink
(
File
link
,
String
target
,
String
relativePath
)
throws
IOException
{
Tar
Entry
e
=
new
Tar
Entry
(
relativePath
,
LF_SYMLINK
);
Tar
ArchiveEntry
e
=
new
TarArchive
Entry
(
relativePath
,
LF_SYMLINK
);
try
{
int
mode
=
IOUtils
.
mode
(
link
);
if
(
mode
!=
-
1
)
{
...
...
@@ -73,16 +75,11 @@ final class TarArchiver extends Archiver {
}
catch
(
PosixException
x
)
{
// ignore
}
e
.
setLinkName
(
target
);
try
{
StringBuffer
linkName
=
(
StringBuffer
)
LINKNAME_FIELD
.
get
(
e
);
linkName
.
setLength
(
0
);
linkName
.
append
(
target
);
}
catch
(
IllegalAccessException
x
)
{
throw
new
IOException
(
"Failed to set linkName"
,
x
);
}
tar
.
putNextEntry
(
e
);
tar
.
putArchiveEntry
(
e
);
tar
.
closeArchiveEntry
();
entriesWritten
++;
}
...
...
@@ -97,14 +94,14 @@ final class TarArchiver extends Archiver {
if
(
file
.
isDirectory
())
relativePath
+=
'/'
;
Tar
Entry
te
=
new
Tar
Entry
(
relativePath
);
Tar
ArchiveEntry
te
=
new
TarArchive
Entry
(
relativePath
);
int
mode
=
IOUtils
.
mode
(
file
);
if
(
mode
!=-
1
)
te
.
setMode
(
mode
);
te
.
setModTime
(
file
.
lastModified
());
if
(!
file
.
isDirectory
())
te
.
setSize
(
file
.
length
());
tar
.
put
Next
Entry
(
te
);
tar
.
put
Archive
Entry
(
te
);
if
(!
file
.
isDirectory
())
{
FileInputStream
in
=
new
FileInputStream
(
file
);
...
...
@@ -117,25 +114,11 @@ final class TarArchiver extends Archiver {
}
}
tar
.
closeEntry
();
tar
.
close
Archive
Entry
();
entriesWritten
++;
}
public
void
close
()
throws
IOException
{
tar
.
close
();
}
private
static
final
Field
LINKNAME_FIELD
=
getTarEntryLinkNameField
();
private
static
Field
getTarEntryLinkNameField
()
{
try
{
Field
f
=
TarEntry
.
class
.
getDeclaredField
(
"linkName"
);
f
.
setAccessible
(
true
);
return
f
;
}
catch
(
SecurityException
e
)
{
throw
new
AssertionError
(
e
);
}
catch
(
NoSuchFieldException
e
)
{
throw
new
AssertionError
(
e
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录