A具有以下描述文件存储库的类。有一个服务器充当主存储库,然后有多台客户端计算机。
function remove_menu_pages() {
global $user_ID;
if ( !current_user_can( 'publish_posts' ) ) {
remove_menu_page('edit-comments.php'); // Comments
remove_menu_page('edit.php?post_type=page'); // Pages
remove_menu_page('wpcf7'); // Contact Form 7 Menu
}
}
add_action( 'admin_init', 'remove_menu_pages' );
有时我需要将客户端存储库更新为最新版本。客户端将其回购的描述发送到服务器。为了执行更新,我需要知道已更新了哪些文件-获取仅包含更新条目(class Entry
{
String name;
String filename;
ZonedDateTime lastModified;
}
class Section
{
String name;
String directory
List<Section> sections;
List<Entry> Entries;
}
Section localRepositoryDescription = scanFilesystem();
)的树。我已经读过各种算法来区分两棵树,但是我仍然不确定如何完成此任务。
一旦有了这个差异树,我将压缩这些修改后的文件以存档并将相应的响应发送给客户端。
答案 0 :(得分:0)
假设您已经管理了 lastModified 属性,如果Entry中实现了hashCode()/ equals(Object obj)方法,则可以创建两个Set<Entry>
,一个在客户端在服务器上。
然后在服务器端,您可以将两个集合与类似的代码进行比较
List<Entry> updated = getServerEntries().stream().filter(serverEntry -> {
return getClientEntries().contains(serverEntry);
}).collect(Collectors.toList());
很显然,这段代码假设客户端需要基于服务器端Set<Entry>
进行同步。通常, contains 方法将首先使用哈希搜索条目,如果找到,两个相等的hashCode,使用 equals 。
一个简单的hashCode可能是
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((filename == null) ? 0 : filename.hashCode());
result = prime * result + ((lastModified == null) ? 0 : lastModified.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
令人高兴的是,假设您的应用程序在发生时自动更新 Entry.lastModified ,您可以免费获得所有这些信息。