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

📄 editorp.c

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
   * needed information. */  diff_stream = svn_stream_create(b, pool);  svn_stream_set_write(diff_stream, ra_svn_svndiff_handler);  svn_stream_set_close(diff_stream, ra_svn_svndiff_close_handler);  if (svn_ra_svn_has_capability(b->conn, SVN_RA_SVN_CAP_SVNDIFF1))    svn_txdelta_to_svndiff2(wh, wh_baton, diff_stream, 1, pool);  else    svn_txdelta_to_svndiff2(wh, wh_baton, diff_stream, 0, pool);  return SVN_NO_ERROR;}  static svn_error_t *ra_svn_change_file_prop(void *file_baton,                                            const char *name,                                            const svn_string_t *value,                                            apr_pool_t *pool){  ra_svn_baton_t *b = file_baton;  SVN_ERR(check_for_error(b->eb, pool));  SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "change-file-prop", "cc(?s)",                               b->token, name, value));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_close_file(void *file_baton,                                      const char *text_checksum,                                      apr_pool_t *pool){  ra_svn_baton_t *b = file_baton;  SVN_ERR(check_for_error(b->eb, pool));  SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "close-file", "c(?c)",                               b->token, text_checksum));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_absent_file(const char *path,                                       void *parent_baton, apr_pool_t *pool){  ra_svn_baton_t *b = parent_baton;  /* Avoid sending an unknown command if the other end doesn't support     absent-file. */  if (! svn_ra_svn_has_capability(b->conn, SVN_RA_SVN_CAP_ABSENT_ENTRIES))    return SVN_NO_ERROR;  SVN_ERR(check_for_error(b->eb, pool));  SVN_ERR(svn_ra_svn_write_cmd(b->conn, pool, "absent-file", "cc", path,                               b->token));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_close_edit(void *edit_baton, apr_pool_t *pool){  ra_svn_edit_baton_t *eb = edit_baton;  svn_error_t *err;  assert(!eb->got_status);  eb->got_status = TRUE;  SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "close-edit", ""));  err = svn_ra_svn_read_cmd_response(eb->conn, pool, "");  if (err)    {      svn_error_clear(svn_ra_svn_write_cmd(eb->conn, pool, "abort-edit", ""));      return err;    }  if (eb->callback)    SVN_ERR(eb->callback(eb->callback_baton));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_abort_edit(void *edit_baton, apr_pool_t *pool){  ra_svn_edit_baton_t *eb = edit_baton;  if (eb->got_status)    return SVN_NO_ERROR;  SVN_ERR(svn_ra_svn_write_cmd(eb->conn, pool, "abort-edit", ""));  SVN_ERR(svn_ra_svn_read_cmd_response(eb->conn, pool, ""));  return SVN_NO_ERROR;}void svn_ra_svn__get_editorp(const svn_delta_editor_t **editor,                             void **edit_baton, svn_ra_svn_conn_t *conn,                             apr_pool_t *pool,                             svn_ra_svn_edit_callback callback,                             void *callback_baton){  svn_delta_editor_t *ra_svn_editor = svn_delta_default_editor(pool);  ra_svn_edit_baton_t *eb;  eb = apr_palloc(pool, sizeof(*eb));  eb->conn = conn;  eb->callback = callback;  eb->callback_baton = callback_baton;  eb->next_token = 0;  eb->got_status = FALSE;  ra_svn_editor->set_target_revision = ra_svn_target_rev;  ra_svn_editor->open_root = ra_svn_open_root;  ra_svn_editor->delete_entry = ra_svn_delete_entry;  ra_svn_editor->add_directory = ra_svn_add_dir;  ra_svn_editor->open_directory = ra_svn_open_dir;  ra_svn_editor->change_dir_prop = ra_svn_change_dir_prop;  ra_svn_editor->close_directory = ra_svn_close_dir;  ra_svn_editor->absent_directory = ra_svn_absent_dir;  ra_svn_editor->add_file = ra_svn_add_file;  ra_svn_editor->open_file = ra_svn_open_file;  ra_svn_editor->apply_textdelta = ra_svn_apply_textdelta;  ra_svn_editor->change_file_prop = ra_svn_change_file_prop;  ra_svn_editor->close_file = ra_svn_close_file;  ra_svn_editor->absent_file = ra_svn_absent_file;  ra_svn_editor->close_edit = ra_svn_close_edit;  ra_svn_editor->abort_edit = ra_svn_abort_edit;  *editor = ra_svn_editor;  *edit_baton = eb;}/* --- DRIVING AN EDITOR --- *//* Store a token entry.  The token string will be copied into pool. */static ra_svn_token_entry_t *store_token(ra_svn_driver_state_t *ds,                                         void *baton, const char *token,                                         svn_boolean_t is_file,                                         apr_pool_t *pool){  ra_svn_token_entry_t *entry;  entry = apr_palloc(pool, sizeof(*entry));  entry->token = apr_pstrdup(pool, token);  entry->baton = baton;  entry->is_file = is_file;  entry->dstream = NULL;  entry->pool = pool;  apr_hash_set(ds->tokens, entry->token, APR_HASH_KEY_STRING, entry);  return entry;}static svn_error_t *lookup_token(ra_svn_driver_state_t *ds, const char *token,                                 svn_boolean_t is_file,                                 ra_svn_token_entry_t **entry){  *entry = apr_hash_get(ds->tokens, token, APR_HASH_KEY_STRING);  if (!*entry || (*entry)->is_file != is_file)    return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,                            _("Invalid file or dir token during edit"));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_target_rev(svn_ra_svn_conn_t *conn,                                             apr_pool_t *pool,                                             apr_array_header_t *params,                                             ra_svn_driver_state_t *ds){  svn_revnum_t rev;  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "r", &rev));  SVN_CMD_ERR(ds->editor->set_target_revision(ds->edit_baton, rev, pool));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_open_root(svn_ra_svn_conn_t *conn,                                            apr_pool_t *pool,                                            apr_array_header_t *params,                                            ra_svn_driver_state_t *ds){  svn_revnum_t rev;  apr_pool_t *subpool;  const char *token;  void *root_baton;  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "(?r)c", &rev, &token));  subpool = svn_pool_create(ds->pool);  SVN_CMD_ERR(ds->editor->open_root(ds->edit_baton, rev, subpool,                                    &root_baton));  store_token(ds, root_baton, token, FALSE, subpool);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_delete_entry(svn_ra_svn_conn_t *conn,                                               apr_pool_t *pool,                                               apr_array_header_t *params,                                               ra_svn_driver_state_t *ds){  const char *path, *token;  svn_revnum_t rev;  ra_svn_token_entry_t *entry;  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?r)c", &path, &rev, &token));  SVN_ERR(lookup_token(ds, token, FALSE, &entry));  path = svn_path_canonicalize(path, pool);  SVN_CMD_ERR(ds->editor->delete_entry(path, rev, entry->baton, pool));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_add_dir(svn_ra_svn_conn_t *conn,                                          apr_pool_t *pool,                                          apr_array_header_t *params,                                          ra_svn_driver_state_t *ds){  const char *path, *token, *child_token, *copy_path;  svn_revnum_t copy_rev;  ra_svn_token_entry_t *entry;  apr_pool_t *subpool;  void *child_baton;  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccc(?cr)", &path, &token,                                 &child_token, &copy_path, &copy_rev));  SVN_ERR(lookup_token(ds, token, FALSE, &entry));  subpool = svn_pool_create(entry->pool);  path = svn_path_canonicalize(path, pool);  if (copy_path)    copy_path = svn_path_canonicalize(copy_path, pool);  SVN_CMD_ERR(ds->editor->add_directory(path, entry->baton, copy_path,                                        copy_rev, subpool, &child_baton));  store_token(ds, child_baton, child_token, FALSE, subpool);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_open_dir(svn_ra_svn_conn_t *conn,                                           apr_pool_t *pool,                                           apr_array_header_t *params,                                           ra_svn_driver_state_t *ds){  const char *path, *token, *child_token;  svn_revnum_t rev;  ra_svn_token_entry_t *entry;  apr_pool_t *subpool;  void *child_baton;  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccc(?r)", &path, &token,                                 &child_token, &rev));  SVN_ERR(lookup_token(ds, token, FALSE, &entry));  subpool = svn_pool_create(entry->pool);  path = svn_path_canonicalize(path, pool);  SVN_CMD_ERR(ds->editor->open_directory(path, entry->baton, rev, subpool,                                         &child_baton));  store_token(ds, child_baton, child_token, FALSE, subpool);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_change_dir_prop(svn_ra_svn_conn_t *conn,                                                  apr_pool_t *pool,                                                  apr_array_header_t *params,                                                  ra_svn_driver_state_t *ds){  const char *token, *name;  svn_string_t *value;  ra_svn_token_entry_t *entry;  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "cc(?s)", &token, &name,                                 &value));  SVN_ERR(lookup_token(ds, token, FALSE, &entry));  SVN_CMD_ERR(ds->editor->change_dir_prop(entry->baton, name, value,                                          entry->pool));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_close_dir(svn_ra_svn_conn_t *conn,                                            apr_pool_t *pool,                                            apr_array_header_t *params,                                            ra_svn_driver_state_t *ds){  const char *token;  ra_svn_token_entry_t *entry;  /* Parse and look up the directory token. */  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c", &token));  SVN_ERR(lookup_token(ds, token, FALSE, &entry));  /* Close the directory and destroy the baton. */  SVN_CMD_ERR(ds->editor->close_directory(entry->baton, pool));  apr_hash_set(ds->tokens, token, APR_HASH_KEY_STRING, NULL);  apr_pool_destroy(entry->pool);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_absent_dir(svn_ra_svn_conn_t *conn,                                             apr_pool_t *pool,                                             apr_array_header_t *params,                                             ra_svn_driver_state_t *ds){  const char *path;  const char *token;  ra_svn_token_entry_t *entry;  /* Parse parameters and look up the directory token. */  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "cc", &path, &token));  SVN_ERR(lookup_token(ds, token, FALSE, &entry));  /* Call the editor. */  SVN_CMD_ERR(ds->editor->absent_directory(path, entry->baton, pool));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_add_file(svn_ra_svn_conn_t *conn,                                           apr_pool_t *pool,                                           apr_array_header_t *params,                                           ra_svn_driver_state_t *ds){  const char *path, *token, *file_token, *copy_path;  svn_revnum_t copy_rev;  ra_svn_token_entry_t *entry, *file_entry;  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccc(?cr)", &path, &token,                                 &file_token, &copy_path, &copy_rev));  SVN_ERR(lookup_token(ds, token, FALSE, &entry));  ds->file_refs++;

⌨️ 快捷键说明

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