mirror of
https://github.com/hierynomus/sshj.git
synced 2025-12-06 15:20:54 +03:00
Enable renaming with flags (#652)
* Enable renaming with flags The SFTP protocol allows to rename files by specifying extra flags: - OVERWRITE - ATOMIC - NATIVE The flags are exposed through a new RenameFlags enum and can be passed as parameters to the rename() method in SFTPClient/SFTPEngine. Relates to #563 * Update RenameFlags.java * Update RenameFlags.java * Align license header with all other files * Make RenameFlags parameter in line with OpenMode(s) Co-authored-by: Jeroen van Erp <jeroen@hierynomus.com>
This commit is contained in:
32
src/main/java/net/schmizz/sshj/sftp/RenameFlags.java
Normal file
32
src/main/java/net/schmizz/sshj/sftp/RenameFlags.java
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C)2009 - SSHJ Contributors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package net.schmizz.sshj.sftp;
|
||||||
|
|
||||||
|
public enum RenameFlags {
|
||||||
|
OVERWRITE(1),
|
||||||
|
ATOMIC(2),
|
||||||
|
NATIVE(4);
|
||||||
|
|
||||||
|
private final long flag;
|
||||||
|
|
||||||
|
RenameFlags(long flag) {
|
||||||
|
this.flag = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long longValue() {
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -115,9 +115,13 @@ public class SFTPClient
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rename(String oldpath, String newpath)
|
public void rename(String oldpath, String newpath) throws IOException {
|
||||||
|
rename(oldpath, newpath, EnumSet.noneOf(RenameFlags.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rename(String oldpath, String newpath, Set<RenameFlags> renameFlags)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
engine.rename(oldpath, newpath);
|
engine.rename(oldpath, newpath, renameFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rm(String filename)
|
public void rm(String filename)
|
||||||
|
|||||||
@@ -230,12 +230,18 @@ public class SFTPEngine
|
|||||||
return stat(PacketType.LSTAT, path);
|
return stat(PacketType.LSTAT, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rename(String oldPath, String newPath)
|
public void rename(String oldPath, String newPath, Set<RenameFlags> flags)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
if (operativeVersion < 1)
|
if (operativeVersion < 1)
|
||||||
throw new SFTPException("RENAME is not supported in SFTPv" + operativeVersion);
|
throw new SFTPException("RENAME is not supported in SFTPv" + operativeVersion);
|
||||||
|
|
||||||
|
long renameFlagMask = 0L;
|
||||||
|
for (RenameFlags flag : flags) {
|
||||||
|
renameFlagMask = renameFlagMask | flag.longValue();
|
||||||
|
}
|
||||||
|
|
||||||
doRequest(
|
doRequest(
|
||||||
newRequest(PacketType.RENAME).putString(oldPath, sub.getRemoteCharset()).putString(newPath, sub.getRemoteCharset())
|
newRequest(PacketType.RENAME).putString(oldPath, sub.getRemoteCharset()).putString(newPath, sub.getRemoteCharset()).putUInt32(renameFlagMask)
|
||||||
).ensureStatusPacketIsOK();
|
).ensureStatusPacketIsOK();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -117,9 +117,9 @@ public class StatefulSFTPClient
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void rename(String oldpath, String newpath)
|
public void rename(String oldpath, String newpath, Set<RenameFlags> renameFlags)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
super.rename(cwdify(oldpath), cwdify(newpath));
|
super.rename(cwdify(oldpath), cwdify(newpath), renameFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user