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 {
|
||||
engine.rename(oldpath, newpath);
|
||||
engine.rename(oldpath, newpath, renameFlags);
|
||||
}
|
||||
|
||||
public void rm(String filename)
|
||||
|
||||
@@ -230,12 +230,18 @@ public class SFTPEngine
|
||||
return stat(PacketType.LSTAT, path);
|
||||
}
|
||||
|
||||
public void rename(String oldPath, String newPath)
|
||||
public void rename(String oldPath, String newPath, Set<RenameFlags> flags)
|
||||
throws IOException {
|
||||
if (operativeVersion < 1)
|
||||
throw new SFTPException("RENAME is not supported in SFTPv" + operativeVersion);
|
||||
|
||||
long renameFlagMask = 0L;
|
||||
for (RenameFlags flag : flags) {
|
||||
renameFlagMask = renameFlagMask | flag.longValue();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -117,9 +117,9 @@ public class StatefulSFTPClient
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rename(String oldpath, String newpath)
|
||||
public void rename(String oldpath, String newpath, Set<RenameFlags> renameFlags)
|
||||
throws IOException {
|
||||
super.rename(cwdify(oldpath), cwdify(newpath));
|
||||
super.rename(cwdify(oldpath), cwdify(newpath), renameFlags);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user