⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 update.c

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
        {          props = dir->removed_props;          pool = dir->pool;          info->prop_val = "";          info->prop_val_len = 1;        }      if (info->prop_encoding)        {          if (strcmp(info->prop_encoding, "base64") == 0)            {              svn_string_t encoded;              const svn_string_t *decoded;              encoded.data = info->prop_val;              encoded.len = info->prop_val_len;              decoded = svn_base64_decode_string(&encoded, parser->state->pool);              info->prop_val = decoded->data;              info->prop_val_len = decoded->len;            }          else            {              abort();            }        }      set_val = apr_pmemdup(pool, info->prop_val, info->prop_val_len);      set_val_str = svn_string_ncreate(set_val, info->prop_val_len, pool);      svn_ra_serf__set_ver_prop(props, info->base_name, info->base_rev,                                ns->namespace, ns->url, set_val_str, pool);      svn_ra_serf__xml_pop_state(parser);    }  else if ((state == IGNORE_PROP_NAME || state == NEED_PROP_NAME))    {      svn_ra_serf__xml_pop_state(parser);    }  return SVN_NO_ERROR;}static svn_error_t *cdata_report(svn_ra_serf__xml_parser_t *parser,             void *userData,             const char *data,             apr_size_t len){  report_context_t *ctx = userData;  if (parser->state->current_state == PROP)    {      report_info_t *info = parser->state->private;      svn_ra_serf__expand_string(&info->prop_val, &info->prop_val_len,                                 data, len, parser->state->pool);    }  return SVN_NO_ERROR;}/** Editor callbacks given to callers to create request body */static svn_error_t *set_path(void *report_baton,         const char *path,         svn_revnum_t revision,         svn_boolean_t start_empty,         const char *lock_token,         apr_pool_t *pool){  report_context_t *report = report_baton;  serf_bucket_t *tmp;  svn_stringbuf_t *path_buf;  tmp = SERF_BUCKET_SIMPLE_STRING_LEN("<S:entry rev=\"",                                      sizeof("<S:entry rev=\"")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  tmp = SERF_BUCKET_SIMPLE_STRING(apr_ltoa(report->pool, revision),                                  report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  tmp = SERF_BUCKET_SIMPLE_STRING_LEN("\"", sizeof("\"")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  if (lock_token)    {      const char *path_copy, *token_copy;      path_copy = apr_pstrdup(report->pool, path);      token_copy = apr_pstrdup(report->pool, lock_token);      apr_hash_set(report->lock_path_tokens, path_copy, APR_HASH_KEY_STRING,                   token_copy);      tmp = SERF_BUCKET_SIMPLE_STRING_LEN(" lock-token=\"",                                          sizeof(" lock-token=\"")-1,                                          report->sess->bkt_alloc);      serf_bucket_aggregate_append(report->buckets, tmp);      tmp = SERF_BUCKET_SIMPLE_STRING(lock_token,                                      report->sess->bkt_alloc);      serf_bucket_aggregate_append(report->buckets, tmp);      tmp = SERF_BUCKET_SIMPLE_STRING_LEN("\"", sizeof("\"")-1,                                          report->sess->bkt_alloc);      serf_bucket_aggregate_append(report->buckets, tmp);    }  if (start_empty)    {      tmp = SERF_BUCKET_SIMPLE_STRING_LEN(" start-empty=\"true\"",                                          sizeof(" start-empty=\"true\"")-1,                                          report->sess->bkt_alloc);      serf_bucket_aggregate_append(report->buckets, tmp);    }  tmp = SERF_BUCKET_SIMPLE_STRING_LEN(">", sizeof(">")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  path_buf = NULL;  svn_xml_escape_cdata_cstring(&path_buf, path, report->pool);  tmp = SERF_BUCKET_SIMPLE_STRING_LEN(path_buf->data, path_buf->len,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  tmp = SERF_BUCKET_SIMPLE_STRING_LEN("</S:entry>",                                      sizeof("</S:entry>")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  return APR_SUCCESS;}static svn_error_t *delete_path(void *report_baton,            const char *path,            apr_pool_t *pool){  report_context_t *report = report_baton;  serf_bucket_t *tmp;  const char *path_copy;  tmp = SERF_BUCKET_SIMPLE_STRING_LEN("<S:missing>",                                      sizeof("<S:missing>")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  path_copy = apr_pstrdup(report->pool, path);  tmp = SERF_BUCKET_SIMPLE_STRING(path_copy, report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  tmp = SERF_BUCKET_SIMPLE_STRING_LEN("</S:missing>",                                      sizeof("</S:missing>")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  return APR_SUCCESS;}static svn_error_t *link_path(void *report_baton,          const char *path,          const char *url,          svn_revnum_t revision,          svn_boolean_t start_empty,          const char *lock_token,          apr_pool_t *pool){  report_context_t *report = report_baton;  serf_bucket_t *tmp;  const char *path_copy, *link_copy, *vcc_url;  apr_uri_t uri;  tmp = SERF_BUCKET_SIMPLE_STRING_LEN("<S:entry rev=\"",                                      sizeof("<S:entry rev=\"")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  tmp = SERF_BUCKET_SIMPLE_STRING(apr_ltoa(report->pool, revision),                                  report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  tmp = SERF_BUCKET_SIMPLE_STRING_LEN("\"", sizeof("\"")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  if (lock_token)    {      const char *path_copy, *token_copy;      path_copy = apr_pstrdup(report->pool, path);      token_copy = apr_pstrdup(report->pool, lock_token);      apr_hash_set(report->lock_path_tokens, path_copy, APR_HASH_KEY_STRING,                   token_copy);      tmp = SERF_BUCKET_SIMPLE_STRING_LEN(" lock-token=\"",                                          sizeof(" lock-token=\"")-1,                                          report->sess->bkt_alloc);      serf_bucket_aggregate_append(report->buckets, tmp);      tmp = SERF_BUCKET_SIMPLE_STRING(lock_token,                                      report->sess->bkt_alloc);      serf_bucket_aggregate_append(report->buckets, tmp);      tmp = SERF_BUCKET_SIMPLE_STRING_LEN("\"", sizeof("\"")-1,                                          report->sess->bkt_alloc);      serf_bucket_aggregate_append(report->buckets, tmp);    }  if (start_empty)    {      tmp = SERF_BUCKET_SIMPLE_STRING_LEN(" start-empty=\"true\"",                                          sizeof(" start-empty=\"true\"")-1,                                          report->sess->bkt_alloc);      serf_bucket_aggregate_append(report->buckets, tmp);    }  tmp = SERF_BUCKET_SIMPLE_STRING_LEN(" linkpath=\"/",                                      sizeof(" linkpath=\"/")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  /* We need to pass in the baseline relative path.   *   * TODO Confirm that it's on the same server?   */  apr_uri_parse(pool, url, &uri);  SVN_ERR(svn_ra_serf__discover_root(&vcc_url, &link_copy,                                     report->sess, report->sess->conns[0],                                     uri.path, pool));  link_copy = apr_pstrdup(report->pool, link_copy);  tmp = SERF_BUCKET_SIMPLE_STRING(link_copy, report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  tmp = SERF_BUCKET_SIMPLE_STRING_LEN("\"", sizeof("\"")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  tmp = SERF_BUCKET_SIMPLE_STRING_LEN(">", sizeof(">")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  path_copy = apr_pstrdup(report->pool, path);  tmp = SERF_BUCKET_SIMPLE_STRING(path_copy, report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  tmp = SERF_BUCKET_SIMPLE_STRING_LEN("</S:entry>",                                      sizeof("</S:entry>")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  return APR_SUCCESS;}static svn_error_t *finish_report(void *report_baton,              apr_pool_t *pool){  report_context_t *report = report_baton;  svn_ra_serf__session_t *sess = report->sess;  svn_ra_serf__handler_t *handler;  svn_ra_serf__xml_parser_t *parser_ctx;  svn_ra_serf__list_t *done_list;  serf_bucket_t *tmp;  const char *vcc_url;  apr_hash_t *props;  apr_status_t status;  svn_boolean_t closed_root;  int i;  tmp = SERF_BUCKET_SIMPLE_STRING_LEN("</S:update-report>",                                      sizeof("</S:update-report>")-1,                                      report->sess->bkt_alloc);  serf_bucket_aggregate_append(report->buckets, tmp);  props = apr_hash_make(pool);  SVN_ERR(svn_ra_serf__discover_root(&vcc_url, NULL, sess, sess->conns[0],                                      sess->repos_url.path, pool));  if (!vcc_url)    {      abort();    }  /* create and deliver request */  report->path = vcc_url;  handler = apr_pcalloc(pool, sizeof(*handler));  handler->method = "REPORT";  handler->path = report->path;  handler->body_buckets = report->buckets;  handler->body_type = "text/xml";  handler->conn = sess->conns[0];  handler->session = sess;  parser_ctx = apr_pcalloc(pool, sizeof(*parser_ctx));  parser_ctx->pool = pool;  parser_ctx->user_data = report;  parser_ctx->start = start_report;  parser_ctx->end = end_report;  parser_ctx->cdata = cdata_report;  parser_ctx->done = &report->done;  handler->response_handler = svn_ra_serf__handle_xml_parser;  handler->response_baton = parser_ctx;  svn_ra_serf__request_create(handler);  for (i = 1; i < 4; i++) {      sess->conns[i] = apr_palloc(pool, sizeof(*sess->conns[i]));      sess->conns[i]->bkt_alloc = serf_bucket_allocator_create(sess->pool,                                                               NULL, NULL);      sess->conns[i]->address = sess->conns[0]->address;      sess->conns[i]->hostinfo = sess->conns[0]->hostinfo;      sess->conns[i]->using_ssl = sess->conns[0]->using_ssl;      sess->conns[i]->using_compression = sess->conns[0]->using_compression;      sess->conns[i]->ssl_context = NULL;      sess->conns[i]->auth_header = sess->auth_header;      sess->conns[i]->auth_value = sess->auth_value;      sess->conns[i]->conn = serf_connection_create(sess->context,                                                    sess->conns[i]->address,                                                    svn_ra_serf__conn_setup,                                                    sess->conns[i],                                                    svn_ra_serf__conn_closed,                                                    sess->conns[i],                                                    sess->pool);      sess->num_conns++;  }  sess->cur_conn = 1;  closed_root = FALSE;  while (!report->done || report->active_fetches || report->active_propfinds)    {      status = serf_context_run(sess->context, SERF_DURATION_FOREVER, pool);      if (APR_STATUS_IS_TIMEUP(status))        {          continue;        }      if (status)        {          SVN_ERR(sess->pending_error);          return svn_error_wrap_apr(status, _("Error retrieving REPORT (%d)"),                                    status);        }      /* Switch our connection. */      if (!report->done)         if (++sess->cur_conn == sess->num_conns)             sess->cur_conn = 1;      /* prune our propfind list if they are done. */      done_list = report->done_propfinds;      while (done_list)        {          report->active_propfinds--;          /* If we have some files that we won't be fetching the content           * for, ensure that we update the file with any altered props.           */          if (report->file_propchanges_only)            {              svn_ra_serf__list_t *cur, *prev;              prev = NULL;              cur = report->file_propchanges_only;              while (cur)                {                  report_info_t *item = cur->data;                  if (item->propfind == done_list->data)                    {                      break;                    }                  prev = cur;                  cur = cur->next;                }              /* If we found a match, set the new props and remove this               * propchange from our list.               */              if (cur)                {                  SVN_ERR(handle_propchange_only(cur->data));                  if (!prev)                    {                      report->file_propchanges_only = cur->next;                    }                  else                    {                      prev->next = cur->next;                    }                }            }          done_list = done_list->next;        }      report->done_propfinds = NULL;      /* prune our fetches list if they are done. */      done_list = report->done_fetches;      while (done_list)        {          report_fetch_t *done_fetch = done_list->data;          report_dir_t *cur_dir;          if (done_fetch->err)            {              /* Uh-oh! */              return done_fetch->err;            }          /* decrease our parent's directory refcount. */          cur_dir = done_fetch->info->dir;          cur_dir->ref_c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -