dav/main.c

changeset 209
d24761f1e07c
parent 207
de23f8881e9f
child 210
1d19e0ff18d9
equal deleted inserted replaced
208:1fb26aca5093 209:d24761f1e07c
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++;

mercurial