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

📄 editor.c

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
  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,                                             void *baton){  ra_svn_driver_state_t *ds = baton;  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));  SVN_ERR(svn_ra_svn_write_cmd_response(conn, 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,                                            void *baton){  ra_svn_driver_state_t *ds = baton;  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, subpool);  SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));  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,                                               void *baton){  ra_svn_driver_state_t *ds = baton;  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, &entry, pool));  path = svn_path_canonicalize(path, pool);  SVN_CMD_ERR(ds->editor->delete_entry(path, rev, entry->baton, entry->pool));  SVN_ERR(svn_ra_svn_write_cmd_response(conn, 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,                                          void *baton){  ra_svn_driver_state_t *ds = baton;  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, &entry, pool));  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, subpool);  SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));  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,                                           void *baton){  ra_svn_driver_state_t *ds = baton;  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, &entry, pool));  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, subpool);  SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));  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,                                                  void *baton){  ra_svn_driver_state_t *ds = baton;  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, &entry, pool));  if (!entry->err)    entry->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,                                            void *baton){  ra_svn_driver_state_t *ds = baton;  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, &entry, pool));  /* Return any delayed errors. */  apr_pool_cleanup_kill(entry->pool, entry, clear_token_err);  SVN_CMD_ERR(entry->err);  /* 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);  SVN_ERR(svn_ra_svn_write_cmd_response(conn, 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,                                           void *baton){  ra_svn_driver_state_t *ds = baton;  const char *path, *token, *file_token, *copy_path;  svn_revnum_t copy_rev;  ra_svn_token_entry_t *entry, *file_entry;  apr_pool_t *subpool;  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, &entry, pool));  /* File may outlive parent directory, so use ds->pool here. */  subpool = svn_pool_create(ds->pool);  path = svn_path_canonicalize(path, pool);  if (copy_path)    copy_path = svn_path_canonicalize(copy_path, pool);  file_entry = store_token(ds, NULL, file_token, subpool);  file_entry->err = ds->editor->add_file(path, entry->baton, copy_path,                                         copy_rev, subpool,                                         &file_entry->baton);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_open_file(svn_ra_svn_conn_t *conn,                                            apr_pool_t *pool,                                            apr_array_header_t *params,                                            void *baton){  ra_svn_driver_state_t *ds = baton;  const char *path, *token, *file_token;  svn_revnum_t rev;  ra_svn_token_entry_t *entry, *file_entry;  apr_pool_t *subpool;  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "ccc(?r)", &path, &token,                                 &file_token, &rev));  SVN_ERR(lookup_token(ds, token, &entry, pool));  /* File may outlive parent directory, so use ds->pool here. */  subpool = svn_pool_create(ds->pool);  path = svn_path_canonicalize(path, pool);  file_entry = store_token(ds, NULL, file_token, subpool);  file_entry->err = ds->editor->open_file(path, entry->baton, rev, subpool,                                          &file_entry->baton);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_apply_textdelta(svn_ra_svn_conn_t *conn,                                                  apr_pool_t *pool,                                                  apr_array_header_t *params,                                                  void *baton){  ra_svn_driver_state_t *ds = baton;  const char *token;  ra_svn_token_entry_t *entry;  svn_txdelta_window_handler_t wh;  void *wh_baton;  svn_stream_t *stream;  apr_pool_t *subpool;  svn_ra_svn_item_t *item;  char *base_checksum;  /* Parse arguments and look up the token. */  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?c)",                                 &token, &base_checksum));  SVN_ERR(lookup_token(ds, token, &entry, pool));  if (!entry->err)    entry->err = ds->editor->apply_textdelta(entry->baton, base_checksum, pool,                                             &wh, &wh_baton);  if (!entry->err)    stream = svn_txdelta_parse_svndiff(wh, wh_baton, TRUE, entry->pool);  subpool = svn_pool_create(entry->pool);  while (1)    {      apr_pool_clear(subpool);      SVN_ERR(svn_ra_svn_read_item(conn, subpool, &item));      if (item->kind != SVN_RA_SVN_STRING)        return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,                                _("Non-string as part of text delta"));      if (item->u.string->len == 0)          break;      if (!entry->err)        entry->err = svn_stream_write(stream, item->u.string->data,                                      &item->u.string->len);    }  if (!entry->err)    entry->err = svn_stream_close(stream);  apr_pool_destroy(subpool);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_change_file_prop(svn_ra_svn_conn_t *conn,                                                   apr_pool_t *pool,                                                   apr_array_header_t *params,                                                   void *baton){  ra_svn_driver_state_t *ds = baton;  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, &entry, pool));  if (!entry->err)    entry->err = ds->editor->change_file_prop(entry->baton, name, value,                                              entry->pool);  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_close_file(svn_ra_svn_conn_t *conn,                                             apr_pool_t *pool,                                             apr_array_header_t *params,                                             void *baton){  ra_svn_driver_state_t *ds = baton;  const char *token;  ra_svn_token_entry_t *entry;  const char *text_checksum;  /* Parse arguments and look up the file token. */  SVN_ERR(svn_ra_svn_parse_tuple(params, pool, "c(?c)",                                 &token, &text_checksum));  SVN_ERR(lookup_token(ds, token, &entry, pool));  /* Return any delayed errors. */  apr_pool_cleanup_kill(entry->pool, entry, clear_token_err);  SVN_CMD_ERR(entry->err);  /* Close the file and destroy the baton. */  SVN_CMD_ERR(ds->editor->close_file(entry->baton, text_checksum, pool));  apr_hash_set(ds->tokens, token, APR_HASH_KEY_STRING, NULL);  apr_pool_destroy(entry->pool);  SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, ""));  return SVN_NO_ERROR;}static svn_error_t *ra_svn_handle_close_edit(svn_ra_svn_conn_t *conn,                                             apr_pool_t *pool,                                             apr_array_header_t *params,                                             void *baton){  ra_svn_driver_state_t *ds = baton;  svn_error_t *err;  err = ds->editor->close_edit(ds->edit_baton, pool);  if (ds->aborted)    *ds->aborted = (err != SVN_NO_ERROR);  SVN_CMD_ERR(err);  return svn_ra_svn_write_cmd_response(conn, pool, "");}static svn_error_t *ra_svn_handle_abort_edit(svn_ra_svn_conn_t *conn,                                             apr_pool_t *pool,                                             apr_array_header_t *params,                                             void *baton){  ra_svn_driver_state_t *ds = baton;  if (ds->aborted)    *ds->aborted = TRUE;  SVN_CMD_ERR(ds->editor->abort_edit(ds->edit_baton, pool));  return svn_ra_svn_write_cmd_response(conn, pool, "");}static svn_error_t *ra_svn_handle_finish_replay(svn_ra_svn_conn_t *conn,                                                apr_pool_t *pool,                                                apr_array_header_t *params,                                                void *baton){  ra_svn_driver_state_t *ds = baton;  if (!ds->for_replay)    return svn_error_createf      (SVN_ERR_RA_SVN_UNKNOWN_CMD, NULL,       _("Command 'finish-replay' invalid outside of replays"));  return SVN_NO_ERROR;}static const svn_ra_svn_cmd_entry_t ra_svn_edit_commands[] = {  { "target-rev",       ra_svn_handle_target_rev },  { "open-root",        ra_svn_handle_open_root },  { "delete-entry",     ra_svn_handle_delete_entry },  { "add-dir",          ra_svn_handle_add_dir },  { "open-dir",         ra_svn_handle_open_dir },  { "change-dir-prop",  ra_svn_handle_change_dir_prop },  { "close-dir",        ra_svn_handle_close_dir },  { "add-file",         ra_svn_handle_add_file },  { "open-file",        ra_svn_handle_open_file },  { "apply-textdelta",  ra_svn_handle_apply_textdelta },  { "change-file-prop", ra_svn_handle_change_file_prop },  { "close-file",       ra_svn_handle_close_file },  { "close-edit",       ra_svn_handle_close_edit, TRUE },  { "abort-edit",       ra_svn_handle_abort_edit, TRUE },  { "finish-replay",    ra_svn_handle_finish_replay, TRUE },  { NULL }};svn_error_t *svn_ra_svn_drive_editor2(svn_ra_svn_conn_t *conn,                                      apr_pool_t *pool,                                      const svn_delta_editor_t *editor,                                      void *edit_baton,                                      svn_boolean_t *aborted,                                      svn_boolean_t for_replay){  ra_svn_driver_state_t state;  if (svn_ra_svn_has_capability(conn, SVN_RA_SVN_CAP_EDIT_PIPELINE))    return svn_ra_svn__drive_editorp(conn, pool, editor, edit_baton, aborted,                                     for_replay);  state.editor = editor;  state.edit_baton = edit_baton;  state.tokens = apr_hash_make(pool);  state.aborted = aborted;  state.pool = pool;  state.for_replay = for_replay;  return svn_ra_svn_handle_commands(conn, pool, ra_svn_edit_commands, &state);}svn_error_t *svn_ra_svn_drive_editor(svn_ra_svn_conn_t *conn, apr_pool_t *pool,                                     const svn_delta_editor_t *editor,                                     void *edit_baton,                                     svn_boolean_t *aborted){  return svn_ra_svn_drive_editor2(conn,                                  pool,                                  editor,                                  edit_baton,                                  aborted,                                  FALSE);}

⌨️ 快捷键说明

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