117 ret = cmd_date(args); |
117 ret = cmd_date(args); |
118 } else if(!strcasecmp(cmd, "set-property")) { |
118 } else if(!strcasecmp(cmd, "set-property")) { |
119 ret = cmd_set_property(args); |
119 ret = cmd_set_property(args); |
120 } else if(!strcasecmp(cmd, "get-property")) { |
120 } else if(!strcasecmp(cmd, "get-property")) { |
121 ret = cmd_get_property(args); |
121 ret = cmd_get_property(args); |
122 } else if(!strcasecmp(cmd, "info")) { |
122 } else if(!strcasecmp(cmd, "lock")) { |
|
123 ret = cmd_lock(args); |
|
124 } else if(!strcasecmp(cmd, "unlock")) { |
|
125 ret = cmd_unlock(args); |
|
126 } else if(!strcasecmp(cmd, "info")) { |
123 ret = cmd_info(args); |
127 ret = cmd_info(args); |
124 } else if(!strcasecmp(cmd, "add-repository")) { |
128 } else if(!strcasecmp(cmd, "add-repository")) { |
125 ret = cmd_add_repository(args); |
129 ret = cmd_add_repository(args); |
126 } else if(!strcasecmp(cmd, "list-repositories")) { |
130 } else if(!strcasecmp(cmd, "list-repositories")) { |
127 ret = list_repositories(); |
131 ret = list_repositories(); |
149 fprintf(stderr, "Commands:\n"); |
153 fprintf(stderr, "Commands:\n"); |
150 fprintf(stderr, " list [-altpcR] [-u <date>] <url>\n"); |
154 fprintf(stderr, " list [-altpcR] [-u <date>] <url>\n"); |
151 fprintf( |
155 fprintf( |
152 stderr, |
156 stderr, |
153 " get [-pcR] [-o <file>] [-u <date>] <url>\n"); |
157 " get [-pcR] [-o <file>] [-u <date>] <url>\n"); |
154 fprintf(stderr, " put [-pcR] [-k <key>] <url> <file>\n"); |
158 fprintf(stderr, " put [-pcR] [-k <key>] [-L <lock>] <url> <file>\n"); |
155 fprintf(stderr, " mkdir [-pc] [-k <key>] <url>\n"); |
159 fprintf(stderr, " mkdir [-pc] [-k <key>] [-L <lock>] <url>\n"); |
156 fprintf(stderr, " remove [-pc] <url>\n"); |
160 fprintf(stderr, " remove [-pc] [-L <lock>] <url>\n"); |
157 fprintf(stderr, " copy [-pcO] <url> <url>\n"); |
161 fprintf(stderr, " copy [-pcO] [-L <lock>] <url> <url>\n"); |
158 fprintf(stderr, " move [-pcO] <url> <url>\n"); |
162 fprintf(stderr, " move [-pcO] [-L <lock>] <url> <url>\n"); |
159 fprintf( |
163 fprintf( |
160 stderr, |
164 stderr, |
161 " get-property [-pc] [-n <uri>] <url> <property>\n"); |
165 " get-property [-pc] [-n <uri>] <url> <property>\n"); |
162 fprintf( |
166 fprintf( |
163 stderr, |
167 stderr, |
164 " set-property [-pc] [-n <uri>] <url> <property> [value]\n"); |
168 " set-property [-pc] [-L <lock>] [-n <uri>] <url> <property> [value]\n"); |
|
169 fprintf(stderr, " lock [-pc] <url>\n"); |
|
170 fprintf(stderr, " unlock [-pc] [-L <lock>] <url>\n"); |
165 fprintf(stderr, " info [-pc] <url>\n"); |
171 fprintf(stderr, " info [-pc] <url>\n"); |
166 fprintf(stderr, " date [url]\n"); |
172 fprintf(stderr, " date [url]\n"); |
167 fprintf(stderr, "\n"); |
173 fprintf(stderr, "\n"); |
168 fprintf(stderr, "Options:\n"); |
174 fprintf(stderr, "Options:\n"); |
169 fprintf(stderr, |
175 fprintf(stderr, |
180 "Get resources which are modified since the specified date\n"); |
186 "Get resources which are modified since the specified date\n"); |
181 fprintf(stderr, " -a show all files\n"); |
187 fprintf(stderr, " -a show all files\n"); |
182 fprintf(stderr, " -l print resources in long list format\n"); |
188 fprintf(stderr, " -l print resources in long list format\n"); |
183 fprintf(stderr, " -t print content type\n"); |
189 fprintf(stderr, " -t print content type\n"); |
184 fprintf(stderr, " -O override resources\n"); |
190 fprintf(stderr, " -O override resources\n"); |
|
191 fprintf(stderr, " -L <lock> specificy lock token\n"); |
185 fprintf(stderr, " -n <uri> specify namespace uri\n"); |
192 fprintf(stderr, " -n <uri> specify namespace uri\n"); |
186 fprintf(stderr, " -i disable cert verification (all commands)\n"); |
193 fprintf(stderr, " -i disable cert verification (all commands)\n"); |
187 fprintf(stderr, " -v verbose output (all commands)\n"); |
194 fprintf(stderr, " -v verbose output (all commands)\n"); |
188 fprintf(stderr, "\n"); |
195 fprintf(stderr, "\n"); |
189 fprintf(stderr, "Config commands:\n"); |
196 fprintf(stderr, "Config commands:\n"); |
1121 |
1128 |
1122 free(path); |
1129 free(path); |
1123 return 0; |
1130 return 0; |
1124 } |
1131 } |
1125 |
1132 |
|
1133 int cmd_lock(CmdArgs *a) { |
|
1134 if(a->argc != 1) { |
|
1135 fprintf(stderr, "Too %s arguments\n", a->argc > 1 ? "many" : "few"); |
|
1136 return -1; |
|
1137 } |
|
1138 |
|
1139 char *url = a->argv[0]; |
|
1140 char *path = NULL; |
|
1141 DavSession *sn = connect_to_repo(url2repo(url, &path), a); |
|
1142 |
|
1143 if(set_session_config(sn, a)) { |
|
1144 return -1; |
|
1145 } |
|
1146 |
|
1147 DavResource *res = dav_resource_new(sn, path); |
|
1148 if(dav_lock(res)) { |
|
1149 print_resource_error(sn, res->path); |
|
1150 return -1; |
|
1151 } |
|
1152 |
|
1153 DavLock *lock = dav_get_lock(sn, res->path); |
|
1154 if(!lock) { |
|
1155 // this should really not happen |
|
1156 // do some damage control |
|
1157 dav_unlock(res); |
|
1158 fprintf(stderr, "Error: Cannot find lock token for %s\n", res->path); |
|
1159 return -1; |
|
1160 } |
|
1161 |
|
1162 printf("%s\n", lock->token); |
|
1163 |
|
1164 dav_session_destroy(sn); |
|
1165 return 0; |
|
1166 } |
|
1167 |
|
1168 static char* read_line() { |
|
1169 UcxBuffer *buf = ucx_buffer_new(NULL, 128, UCX_BUFFER_AUTOEXTEND); |
|
1170 int c; |
|
1171 while((c = getchar()) != EOF) { |
|
1172 if(c == '\n') { |
|
1173 break; |
|
1174 } |
|
1175 ucx_buffer_putc(buf, c); |
|
1176 } |
|
1177 char *str = NULL; |
|
1178 sstr_t line = sstrtrim(sstrn(buf->space, buf->size)); |
|
1179 if(line.length != 0) { |
|
1180 str = sstrdup(line).ptr; |
|
1181 } |
|
1182 ucx_buffer_free(buf); |
|
1183 return str; |
|
1184 } |
|
1185 |
|
1186 int cmd_unlock(CmdArgs *a) { |
|
1187 if(a->argc != 1) { |
|
1188 fprintf(stderr, "Too %s arguments\n", a->argc > 1 ? "many" : "few"); |
|
1189 return -1; |
|
1190 } |
|
1191 |
|
1192 char *url = a->argv[0]; |
|
1193 char *path = NULL; |
|
1194 DavSession *sn = connect_to_repo(url2repo(url, &path), a); |
|
1195 |
|
1196 if(set_session_config(sn, a)) { |
|
1197 return -1; |
|
1198 } |
|
1199 |
|
1200 char *locktoken = cmd_getoption(a, "lock"); |
|
1201 if(locktoken) { |
|
1202 DavLock *lock = dav_create_lock(sn, locktoken, NULL); |
|
1203 dav_add_collection_lock(sn, "/", lock); |
|
1204 } else { |
|
1205 locktoken = read_line(); |
|
1206 if(!locktoken) { |
|
1207 fprintf(stderr, "No lock token specified.\nAbort.\n"); |
|
1208 return -1; |
|
1209 } |
|
1210 DavLock *lock = dav_create_lock(sn, locktoken, NULL); |
|
1211 dav_add_collection_lock(sn, "/", lock); |
|
1212 } |
|
1213 |
|
1214 DavResource *res = dav_resource_new(sn, path); |
|
1215 if(dav_unlock(res)) { |
|
1216 print_resource_error(sn, res->path); |
|
1217 return -1; |
|
1218 } |
|
1219 |
|
1220 dav_session_destroy(sn); |
|
1221 return 0; |
|
1222 } |
|
1223 |
1126 static int count_children(DavResource *res) { |
1224 static int count_children(DavResource *res) { |
1127 DavResource *child = res->children; |
1225 DavResource *child = res->children; |
1128 int count = 0; |
1226 int count = 0; |
1129 while(child) { |
1227 while(child) { |
1130 count++; |
1228 count++; |