You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2015/12/11 19:54:16 UTC
svn commit: r1719496 - in /subversion/branches/ra-git/subversion:
libsvn_ra_git/commit.c tests/libsvn_client/git-client-test.c
Author: rhuijben
Date: Fri Dec 11 18:54:16 2015
New Revision: 1719496
URL: http://svn.apache.org/viewvc?rev=1719496&view=rev
Log:
On the ra-git branch: Fix verifications of base files by explicitly closing
the source stream.
* subversion/libsvn_ra_git/commit.c
(git_commit_node_baton_t): Keep stream reference.
(git_commit__apply_textdelta): Store reference if there is a base checksum.
(git_commit__close_file): Verify checksums.
* subversion/tests/libsvn_client/git-client-test.c
(test_git_add_nodes): Extend test a tiny bit.
Modified:
subversion/branches/ra-git/subversion/libsvn_ra_git/commit.c
subversion/branches/ra-git/subversion/tests/libsvn_client/git-client-test.c
Modified: subversion/branches/ra-git/subversion/libsvn_ra_git/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_ra_git/commit.c?rev=1719496&r1=1719495&r2=1719496&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_ra_git/commit.c (original)
+++ subversion/branches/ra-git/subversion/libsvn_ra_git/commit.c Fri Dec 11 18:54:16 2015
@@ -88,7 +88,8 @@ typedef struct git_commit_node_baton_t
const char *tmp_abspath;
svn_checksum_t *result_checksum;
svn_checksum_t *base_checksum;
- svn_checksum_t *expected_base_checks;
+ svn_stream_t *base_stream;
+ svn_checksum_t *expected_base_checksum;
} git_commit_node_baton_t;
@@ -660,7 +661,8 @@ git_commit__apply_textdelta(void *file_b
svn_stream_t *base_stream;
if (base_checksum)
- SVN_ERR(svn_checksum_parse_hex(&fb->expected_base_checks, svn_checksum_md5,
+ SVN_ERR(svn_checksum_parse_hex(&fb->expected_base_checksum,
+ svn_checksum_md5,
base_checksum, fb->pool));
SVN_ERR(svn_io_open_unique_file3(&fnew, &fb->tmp_abspath, NULL,
@@ -673,10 +675,15 @@ git_commit__apply_textdelta(void *file_b
SVN_ERR(svn_fs_file_contents(&base_stream, fb->root, fb->root_path,
result_pool));
- svn_txdelta_apply(svn_stream_checksummed2(
- base_stream,
- &fb->base_checksum, NULL, svn_checksum_md5, TRUE,
- result_pool),
+ if (base_checksum)
+ {
+ base_stream = fb->base_stream =
+ svn_stream_checksummed2(base_stream, &fb->base_checksum,
+ NULL, svn_checksum_md5, TRUE,
+ result_pool);
+ }
+
+ svn_txdelta_apply(base_stream,
svn_stream_checksummed2(
svn_stream_from_aprfile2(fnew, FALSE, result_pool),
NULL, &fb->result_checksum, svn_checksum_md5, FALSE,
@@ -702,8 +709,40 @@ git_commit__close_file(void *file_baton,
apr_pool_t *scratch_pool)
{
git_commit_node_baton_t *fb = file_baton;
+ svn_checksum_t *final_checksum;
/* TODO: Verify checksums! */
+ if (text_checksum)
+ SVN_ERR(svn_checksum_parse_hex(&final_checksum, svn_checksum_md5,
+ text_checksum, scratch_pool));
+ else
+ final_checksum = NULL;
+
+ if (final_checksum && fb->result_checksum
+ && !svn_checksum_match(final_checksum, fb->result_checksum))
+ {
+ return svn_error_trace(
+ svn_checksum_mismatch_err(final_checksum, fb->result_checksum,
+ scratch_pool,
+ _("Result checksum error on '%s'"),
+ fb->node_path));
+ }
+
+ if (fb->base_stream)
+ {
+ /* This explicit close sets fb->base_checksum */
+ SVN_ERR(svn_stream_close(fb->base_stream));
+
+ if (!svn_checksum_match(fb->expected_base_checksum, fb->base_checksum))
+ {
+ return svn_error_trace(
+ svn_checksum_mismatch_err(fb->expected_base_checksum,
+ fb->base_checksum,
+ scratch_pool,
+ _("Base checksum mismatch on '%s'"),
+ fb->node_path));
+ }
+ }
if (fb->pb->dir_builder && fb->tmp_abspath)
{
Modified: subversion/branches/ra-git/subversion/tests/libsvn_client/git-client-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/tests/libsvn_client/git-client-test.c?rev=1719496&r1=1719495&r2=1719496&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/tests/libsvn_client/git-client-test.c (original)
+++ subversion/branches/ra-git/subversion/tests/libsvn_client/git-client-test.c Fri Dec 11 18:54:16 2015
@@ -324,7 +324,12 @@ test_git_add_nodes(const svn_test_opts_t
subpool),
subpool),
NULL,
- NULL, NULL,
+ svn_stream_from_string(
+ svn_string_create(
+ "This is the file 'pi'.\n",
+ subpool),
+ subpool),
+ NULL,
mtcc, subpool));
SVN_ERR(svn_client__mtcc_commit(apr_hash_make(subpool),