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

📄 client.c

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
      dirent->created_rev = crev;      SVN_ERR(svn_time_from_cstring(&dirent->time, cdate, pool));      dirent->last_author = cauthor;      apr_hash_set(*dirents, name, APR_HASH_KEY_STRING, dirent);    }  return SVN_NO_ERROR;}static svn_error_t *ra_svn_update(svn_ra_session_t *session,                                  const svn_ra_reporter2_t **reporter,                                  void **report_baton, svn_revnum_t rev,                                  const char *target, svn_boolean_t recurse,                                  const svn_delta_editor_t *update_editor,                                  void *update_baton, apr_pool_t *pool){  ra_svn_session_baton_t *sess_baton = session->priv;  svn_ra_svn_conn_t *conn = sess_baton->conn;  /* Tell the server we want to start an update. */  SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "update", "(?r)cb", rev, target,                               recurse));  SVN_ERR(handle_auth_request(sess_baton, pool));  /* Fetch a reporter for the caller to drive.  The reporter will drive   * update_editor upon finish_report(). */  ra_svn_get_reporter(sess_baton, pool, update_editor, update_baton,                      reporter, report_baton);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_switch(svn_ra_session_t *session,                                  const svn_ra_reporter2_t **reporter,                                  void **report_baton, svn_revnum_t rev,                                  const char *target, svn_boolean_t recurse,                                  const char *switch_url,                                  const svn_delta_editor_t *update_editor,                                  void *update_baton, apr_pool_t *pool){  ra_svn_session_baton_t *sess_baton = session->priv;  svn_ra_svn_conn_t *conn = sess_baton->conn;  /* Tell the server we want to start a switch. */  SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "switch", "(?r)cbc", rev, target,                               recurse, switch_url));  SVN_ERR(handle_auth_request(sess_baton, pool));  /* Fetch a reporter for the caller to drive.  The reporter will drive   * update_editor upon finish_report(). */  ra_svn_get_reporter(sess_baton, pool, update_editor, update_baton,                      reporter, report_baton);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_status(svn_ra_session_t *session,                                  const svn_ra_reporter2_t **reporter,                                  void **report_baton,                                  const char *target, svn_revnum_t rev,                                  svn_boolean_t recurse,                                  const svn_delta_editor_t *status_editor,                                  void *status_baton, apr_pool_t *pool){  ra_svn_session_baton_t *sess_baton = session->priv;  svn_ra_svn_conn_t *conn = sess_baton->conn;  /* Tell the server we want to start a status operation. */  SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "status", "cb(?r)",                               target, recurse, rev));  SVN_ERR(handle_auth_request(sess_baton, pool));  /* Fetch a reporter for the caller to drive.  The reporter will drive   * status_editor upon finish_report(). */  ra_svn_get_reporter(sess_baton, pool, status_editor, status_baton,                      reporter, report_baton);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_diff(svn_ra_session_t *session,                                const svn_ra_reporter2_t **reporter,                                void **report_baton,                                svn_revnum_t rev, const char *target,                                svn_boolean_t recurse,                                svn_boolean_t ignore_ancestry,                                svn_boolean_t text_deltas,                                const char *versus_url,                                const svn_delta_editor_t *diff_editor,                                void *diff_baton, apr_pool_t *pool){  ra_svn_session_baton_t *sess_baton = session->priv;  svn_ra_svn_conn_t *conn = sess_baton->conn;  /* Tell the server we want to start a diff. */  SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "diff", "(?r)cbbcb", rev,                               target, recurse, ignore_ancestry,                               versus_url, text_deltas));  SVN_ERR(handle_auth_request(sess_baton, pool));  /* Fetch a reporter for the caller to drive.  The reporter will drive   * diff_editor upon finish_report(). */  ra_svn_get_reporter(sess_baton, pool, diff_editor, diff_baton,                      reporter, report_baton);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_log(svn_ra_session_t *session,                               const apr_array_header_t *paths,                               svn_revnum_t start, svn_revnum_t end,                               int limit,                               svn_boolean_t discover_changed_paths,                               svn_boolean_t strict_node_history,                               svn_log_message_receiver_t receiver,                               void *receiver_baton, apr_pool_t *pool){  ra_svn_session_baton_t *sess_baton = session->priv;  svn_ra_svn_conn_t *conn = sess_baton->conn;  apr_pool_t *subpool;  int i;  const char *path, *author, *date, *message, *cpath, *action, *copy_path;  svn_ra_svn_item_t *item, *elt;  apr_array_header_t *cplist;  apr_hash_t *cphash;  svn_revnum_t rev, copy_rev;  svn_log_changed_path_t *change;  int nreceived = 0;  SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w((!", "log"));  if (paths)    {      for (i = 0; i < paths->nelts; i++)        {          path = ((const char **) paths->elts)[i];          SVN_ERR(svn_ra_svn_write_cstring(conn, pool, path));        }    }  SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)(?r)(?r)bbn)", start, end,                                 discover_changed_paths, strict_node_history,                                 (apr_uint64_t) limit));  SVN_ERR(handle_auth_request(sess_baton, pool));  /* Read the log messages. */  subpool = svn_pool_create(pool);  while (1)    {      SVN_ERR(svn_ra_svn_read_item(conn, subpool, &item));      if (item->kind == SVN_RA_SVN_WORD && strcmp(item->u.word, "done") == 0)        break;      if (item->kind != SVN_RA_SVN_LIST)        return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,                                _("Log entry not a list"));      SVN_ERR(svn_ra_svn_parse_tuple(item->u.list, subpool, "lr(?c)(?c)(?c)",                                     &cplist, &rev, &author, &date,                                     &message));      if (cplist->nelts > 0)        {          /* Interpret the changed-paths list. */          cphash = apr_hash_make(subpool);          for (i = 0; i < cplist->nelts; i++)            {              elt = &((svn_ra_svn_item_t *) cplist->elts)[i];              if (elt->kind != SVN_RA_SVN_LIST)                return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,                                        _("Changed-path entry not a list"));              SVN_ERR(svn_ra_svn_parse_tuple(elt->u.list, subpool, "cw(?cr)",                                             &cpath, &action, &copy_path,                                             &copy_rev));              cpath = svn_path_canonicalize(cpath, subpool);              if (copy_path)                copy_path = svn_path_canonicalize(copy_path, subpool);              change = apr_palloc(subpool, sizeof(*change));              change->action = *action;              change->copyfrom_path = copy_path;              change->copyfrom_rev = copy_rev;              apr_hash_set(cphash, cpath, APR_HASH_KEY_STRING, change);            }        }      else        cphash = NULL;      if (! (limit && ++nreceived > limit))        SVN_ERR(receiver(receiver_baton, cphash, rev, author, date, message,                         subpool));      apr_pool_clear(subpool);    }  apr_pool_destroy(subpool);  /* Read the response. */  SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, ""));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_check_path(svn_ra_session_t *session,                                      const char *path, svn_revnum_t rev,                                      svn_node_kind_t *kind, apr_pool_t *pool){  ra_svn_session_baton_t *sess_baton = session->priv;  svn_ra_svn_conn_t *conn = sess_baton->conn;  const char *kind_word;  SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "check-path", "c(?r)", path, rev));  SVN_ERR(handle_auth_request(sess_baton, pool));  SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "w", &kind_word));  SVN_ERR(interpret_kind(kind_word, pool, kind));  return SVN_NO_ERROR;}/* If ERR is a command not supported error, wrap it in a   SVN_ERR_RA_NOT_IMPLEMENTED with error message MSG.  Else, return err. */static svn_error_t *handle_unsupported_cmd(svn_error_t *err,                                           const char *msg){  if (err && err->apr_err == SVN_ERR_RA_SVN_UNKNOWN_CMD)    return svn_error_create(SVN_ERR_RA_NOT_IMPLEMENTED, err,                            msg);  return err;}static svn_error_t *ra_svn_stat(svn_ra_session_t *session,                                const char *path, svn_revnum_t rev,                                svn_dirent_t **dirent, apr_pool_t *pool){  ra_svn_session_baton_t *sess_baton = session->priv;  svn_ra_svn_conn_t *conn = sess_baton->conn;  apr_array_header_t *list = NULL;  const char *kind, *cdate, *cauthor;  svn_revnum_t crev;  svn_boolean_t has_props;  apr_uint64_t size;  svn_dirent_t *the_dirent;  SVN_ERR(svn_ra_svn_write_cmd(conn, pool, "stat", "c(?r)", path, rev));  SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),                                 _("'stat' not implemented")));  SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, "(?l)", &list));  if (! list)    {      *dirent = NULL;    }  else    {      SVN_ERR(svn_ra_svn_parse_tuple(list, pool, "wnbr(?c)(?c)",                                     &kind, &size, &has_props,                                     &crev, &cdate, &cauthor));            the_dirent = apr_palloc(pool, sizeof(*the_dirent));      SVN_ERR(interpret_kind(kind, pool, &the_dirent->kind));      the_dirent->size = size;/* FIXME: svn_filesize_t */      the_dirent->has_props = has_props;      the_dirent->created_rev = crev;      SVN_ERR(svn_time_from_cstring(&the_dirent->time, cdate, pool));      the_dirent->last_author = cauthor;      *dirent = the_dirent;    }  return SVN_NO_ERROR;}static svn_error_t *ra_svn_get_locations(svn_ra_session_t *session,                                         apr_hash_t **locations,                                         const char *path,                                         svn_revnum_t peg_revision,                                         apr_array_header_t *location_revisions,                                         apr_pool_t *pool){  ra_svn_session_baton_t *sess_baton = session->priv;  svn_ra_svn_conn_t *conn = sess_baton->conn;  svn_revnum_t revision;  svn_ra_svn_item_t *item;  svn_boolean_t is_done;  int i;  const char *ret_path;  /* Transmit the parameters. */  SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(cr(!",                                 "get-locations", path, peg_revision));  for (i = 0; i < location_revisions->nelts; i++)    {      revision = ((svn_revnum_t *)location_revisions->elts)[i];      SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!r!", revision));    }  SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));  /* Servers before 1.1 don't support this command. Check for this here. */  SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),                                 _("'get-locations' not implemented")));  /* Read the hash items. */  is_done = FALSE;  *locations = apr_hash_make(pool);  while (!is_done)    {      SVN_ERR(svn_ra_svn_read_item(conn, pool, &item));      if (item->kind == SVN_RA_SVN_WORD && strcmp(item->u.word, "done") == 0)        is_done = 1;      else if (item->kind != SVN_RA_SVN_LIST)        return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,                                _("Location entry not a list"));      else        {          SVN_ERR(svn_ra_svn_parse_tuple(item->u.list, pool, "rc",                                         &revision, &ret_path));          ret_path = svn_path_canonicalize(ret_path, pool);          apr_hash_set(*locations, apr_pmemdup(pool, &revision,                                               sizeof(revision)),                       sizeof(revision), ret_path);        }    }  /* Read the response. This is so the server would have a chance to   * report an error. */  SVN_ERR(svn_ra_svn_read_cmd_response(conn, pool, ""));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_get_file_revs(svn_ra_session_t *session,                                         const char *path,                                         svn_revnum_t start, svn_revnum_t end,                                         svn_ra_file_rev_handler_t handler,                                         void *handler_baton, apr_pool_t *pool){  ra_svn_session_baton_t *sess_baton = session->priv;  apr_pool_t *rev_pool, *chunk_pool;  svn_ra_svn_item_t *item;  const char *p;  svn_revnum_t rev;  apr_array_header_t *rev_proplist, *proplist;  apr_hash_t *rev_props;  apr_array_header_t *props;  svn_boolean_t has_txdelta;  svn_boolean_t had_revision = FALSE;  svn_stream_t *stream;  svn_txdelta_window_handler_t d_handler;  void *d_baton;  apr_size_t size;  /* One sub-pool for each revision and one for each txdelta chunk.     Note that the rev_pool must live during the following txdelta. */  rev_pool = svn_pool_create(pool);  chunk_pool = svn_pool_create(pool);  SVN_ERR(svn_ra_svn_write_cmd(sess_baton->conn, pool, "get-file-revs",                               "c(?r)(?r)", path, start, end));  /* Servers before 1.1 don't support this command.  Check for this here. */  SVN_ERR(handle_unsupported_cmd(handle_auth_request(sess_baton, pool),                                 _("'get-file-revs' not implemented")));  while (1)    {      svn_pool_clear(rev_pool);      svn_pool_clear(chunk_pool);      SVN_ERR(svn_ra_svn_read_item(sess_baton->conn, rev_pool, &item));

⌨️ 快捷键说明

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