/* * .bvfs_versions jobid=0 client=<client-name> fnid=10 pathid=10 copies versions (jobid isn't used) */ bool dot_bvfs_versions_cmd(UAContext *ua, const char *cmd) { DBId_t pathid = 0, fnid = 0; int limit = 2000, offset = 0; char *path = NULL, *jobid = NULL, *client = NULL; bool copies = false, versions = false; if (!bvfs_parse_arg(ua, &pathid, &path, &jobid, &limit, &offset)) { ua->error_msg("Can't find jobid, pathid or path argument\n"); return false; /* not enough param */ } if (!bvfs_parse_arg_version(ua, &client, &fnid, &versions, &copies)) { ua->error_msg("Can't find client or fnid argument\n"); return false; /* not enough param */ } if (!ua->guid) { ua->guid = new_guid_list(); } Bvfs fs(ua->jcr, ua->db); fs.set_limit(limit); fs.set_see_all_versions(versions); fs.set_see_copies(copies); fs.set_handler(bvfs_result_handler, ua); fs.set_offset(offset); ua->send->array_start("versions"); fs.get_all_file_versions(pathid, fnid, client); ua->send->array_end("versions"); return true; }
/* * .bvfs_lsdirs jobid=1,2,3,4 pathid=10 * .bvfs_lsdirs jobid=1,2,3,4 path=/ * .bvfs_lsdirs jobid=1,2,3,4 path= */ bool dot_bvfs_lsdirs_cmd(UAContext *ua, const char *cmd) { DBId_t pathid = 0; int limit = 2000, offset = 0; char *path = NULL, *jobid = NULL; if (!bvfs_parse_arg(ua, &pathid, &path, &jobid, &limit, &offset)) { ua->error_msg("Can't find jobid, pathid or path argument\n"); return true; /* not enough param */ } if (!ua->guid) { ua->guid = new_guid_list(); } Bvfs fs(ua->jcr, ua->db); fs.set_jobids(jobid); fs.set_limit(limit); fs.set_handler(bvfs_result_handler, ua); if (pathid) { fs.ch_dir(pathid); } else { fs.ch_dir(path); } fs.set_offset(offset); ua->send->array_start("directories"); fs.ls_special_dirs(); fs.ls_dirs(); ua->send->array_end("directories"); return true; }
/* * .bvfs_restore path=b2XXXXX jobid=1,2 fileid=1,2 dirid=1,2 hardlink=1,2,3,4 */ bool dot_bvfs_restore_cmd(UAContext *ua, const char *cmd) { DBId_t pathid = 0; int limit = 2000, offset = 0, i; char *path = NULL, *jobid = NULL; char *empty = (char *)""; char *fileid, *dirid, *hardlink; fileid = dirid = hardlink = empty; if (!bvfs_parse_arg(ua, &pathid, &path, &jobid, &limit, &offset)) { ua->error_msg("Can't find jobid, pathid or path argument\n"); return false; /* not enough param */ } Bvfs fs(ua->jcr, ua->db); fs.set_jobids(jobid); if ((i = find_arg_with_value(ua, "fileid")) >= 0) { fileid = ua->argv[i]; } if ((i = find_arg_with_value(ua, "dirid")) >= 0) { dirid = ua->argv[i]; } if ((i = find_arg_with_value(ua, "hardlink")) >= 0) { hardlink = ua->argv[i]; } if (fs.compute_restore_list(fileid, dirid, hardlink, path)) { ua->send_msg("OK\n"); } else { ua->error_msg("Can't create restore list\n"); } return true; }
/* * .bvfs_lsdirs jobid=1,2,3,4 pathid=10 * .bvfs_lsdirs jobid=1,2,3,4 path=/ * .bvfs_lsdirs jobid=1,2,3,4 path= */ static bool dot_bvfs_lsdirs(UAContext *ua, const char *cmd) { DBId_t pathid=0; int limit=2000, offset=0; char *path=NULL, *jobid=NULL, *username=NULL; if (!bvfs_parse_arg(ua, &pathid, &path, &jobid, &username, &limit, &offset)) { ua->error_msg("Can't find jobid, pathid or path argument\n"); return true; /* not enough param */ } Bvfs fs(ua->jcr, ua->db); fs.set_username(username); fs.set_jobids(jobid); fs.set_limit(limit); fs.set_handler(bvfs_result_handler, ua); if (pathid) { fs.ch_dir(pathid); } else { fs.ch_dir(path); } fs.set_offset(offset); fs.ls_special_dirs(); fs.ls_dirs(); return true; }
/* * .bvfs_lsfiles jobid=1,2,3,4 pathid=10 * .bvfs_lsfiles jobid=1,2,3,4 path=/ */ bool dot_bvfs_lsfiles_cmd(UAContext *ua, const char *cmd) { DBId_t pathid = 0; int limit = 2000, offset = 0; char *path = NULL, *jobid = NULL; char *pattern = NULL; int i; if (!bvfs_parse_arg(ua, &pathid, &path, &jobid, &limit, &offset)) { ua->error_msg("Can't find jobid, pathid or path argument\n"); return false; /* not enough param */ } if ((i = find_arg_with_value(ua, "pattern")) >= 0) { pattern = ua->argv[i]; } if (!ua->guid) { ua->guid = new_guid_list(); } Bvfs fs(ua->jcr, ua->db); fs.set_jobids(jobid); fs.set_handler(bvfs_result_handler, ua); fs.set_limit(limit); if (pattern) { fs.set_pattern(pattern); } if (pathid) { fs.ch_dir(pathid); } else { fs.ch_dir(path); } fs.set_offset(offset); ua->send->array_start("files"); fs.ls_files(); ua->send->array_end("files"); return true; }