~svn/ubuntu/oneiric/subversion/ppa

« back to all changes in this revision

Viewing changes to subversion/libsvn_ra_dav/props.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2006-12-13 17:57:16 UTC
  • mfrom: (1.1.6 upstream) (0.1.3 etch)
  • Revision ID: james.westby@ubuntu.com-20061213175716-2ysv6z4w5dpa2r2f
Tags: 1.4.2dfsg1-2ubuntu1
* Merge with Debian unstable; remaining changes:
  - Create pot file on build.

Show diffs side-by-side

added added

removed removed

Lines of Context:
111
111
  { ELEM_baseline_relpath, SVN_RA_DAV__PROP_BASELINE_RELPATH, 1 },
112
112
  { ELEM_md5_checksum, SVN_RA_DAV__PROP_MD5_CHECKSUM, 1 },
113
113
  { ELEM_repository_uuid, SVN_RA_DAV__PROP_REPOSITORY_UUID, 1 },
 
114
  { ELEM_deadprop_count, SVN_RA_DAV__PROP_DEADPROP_COUNT, 1 },
114
115
  { 0 }
115
116
};
116
117
 
147
148
    SVN_RA_DAV__XML_CDATA },
148
149
  { SVN_DAV_PROP_NS_DAV, "repository-uuid", ELEM_repository_uuid,
149
150
    SVN_RA_DAV__XML_CDATA },
 
151
  { SVN_DAV_PROP_NS_DAV, "deadprop-count", ELEM_deadprop_count,
 
152
    SVN_RA_DAV__XML_CDATA },
150
153
 
151
154
  /* Unknowns */
152
155
  { "", "", ELEM_unknown, SVN_RA_DAV__XML_COLLECT },
552
555
  if (len > 1 && url[len - 1] == '/')
553
556
      url_path[len - 1] = '\0';
554
557
 
555
 
  SVN_ERR( svn_ra_dav__get_props(&props, sess, url_path, NE_DEPTH_ZERO,
556
 
                                 label, which_props, pool) );
 
558
  SVN_ERR(svn_ra_dav__get_props(&props, sess, url_path, NE_DEPTH_ZERO,
 
559
                                label, which_props, pool));
557
560
 
558
561
  /* ### HACK.  We need to have the client canonicalize paths, get rid
559
562
     of double slashes and such.  This check is just a check against
602
605
  const svn_string_t *value;
603
606
 
604
607
  props[0] = *propname;
605
 
  SVN_ERR( svn_ra_dav__get_props_resource(&rsrc, sess, url, label, props,
606
 
                                          pool) );
 
608
  SVN_ERR(svn_ra_dav__get_props_resource(&rsrc, sess, url, label, props,
 
609
                                         pool));
607
610
 
608
611
  name = apr_pstrcat(pool, propname->nspace, propname->name, NULL);
609
612
  value = apr_hash_get(rsrc->propset, name, APR_HASH_KEY_STRING);
646
649
 
647
650
  /* Split the url into its component pieces (scheme, host, path,
648
651
     etc).  We want the path part. */
649
 
  ne_uri_parse (url, &parsed_url);
 
652
  ne_uri_parse(url, &parsed_url);
650
653
  if (parsed_url.path == NULL)
651
654
    {
652
 
      return svn_error_createf (SVN_ERR_RA_ILLEGAL_URL, NULL,
653
 
                                _("Neon was unable to parse URL '%s'"), url);
 
655
      return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
 
656
                               _("Neon was unable to parse URL '%s'"), url);
654
657
    }
655
658
 
656
 
  path_s = svn_stringbuf_create (parsed_url.path, pool);
 
659
  path_s = svn_stringbuf_create(parsed_url.path, pool);
657
660
 
658
661
  /* Try to get the starting_props from the public url.  If the
659
662
     resource no longer exists in HEAD, we'll get a failure.  That's
660
663
     fine: just keep removing components and trying to get the
661
664
     starting_props from parent directories. */
662
 
  while (! svn_path_is_empty (path_s->data))
 
665
  while (! svn_path_is_empty(path_s->data))
663
666
    {
664
667
      err = svn_ra_dav__get_starting_props(rsrc, sess, path_s->data,
665
668
                                           NULL, pool);
670
673
        goto error;  /* found a _real_ error */
671
674
 
672
675
      /* else... lop off the basename and try again. */
673
 
      lopped_path = svn_path_join(svn_path_basename (path_s->data, pool),
 
676
      lopped_path = svn_path_join(svn_path_basename(path_s->data, pool),
674
677
                                  lopped_path, pool);
675
678
      len = path_s->len;
676
679
      svn_path_remove_component(path_s);
682
685
            (err, _("The path was not part of a repository"));
683
686
          goto error;
684
687
        }
685
 
      svn_error_clear (err);
 
688
      svn_error_clear(err);
686
689
    }
687
690
 
688
691
  /* error out if entire URL was bogus (not a single part of it exists
689
692
     in the repository!)  */
690
 
  if (svn_path_is_empty (path_s->data))
 
693
  if (svn_path_is_empty(path_s->data))
691
694
    {
692
 
      err = svn_error_createf (SVN_ERR_RA_ILLEGAL_URL, NULL,
693
 
                               _("No part of path '%s' was found in "
694
 
                                 "repository HEAD"), parsed_url.path);
 
695
      err = svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
 
696
                              _("No part of path '%s' was found in "
 
697
                                "repository HEAD"), parsed_url.path);
695
698
      goto error;
696
699
    }
697
700
 
717
720
  /* ### Someday, possibly look for disk-cached VCC via get_wcprop callback. */
718
721
 
719
722
  /* Finally, resort to a set of PROPFINDs up parent directories. */
720
 
  SVN_ERR( svn_ra_dav__search_for_starting_props(&rsrc, &lopped_path,
721
 
                                                 sess, url, pool) );
 
723
  SVN_ERR(svn_ra_dav__search_for_starting_props(&rsrc, &lopped_path,
 
724
                                                sess, url, pool));
722
725
 
723
726
  vcc_s = apr_hash_get(rsrc->propset,
724
727
                       SVN_RA_DAV__PROP_VCC, APR_HASH_KEY_STRING);
769
772
        parent directories.
770
773
  */
771
774
 
772
 
  SVN_ERR( svn_ra_dav__search_for_starting_props(&rsrc, &lopped_path,
773
 
                                                 sess, url, pool) );
 
775
  SVN_ERR(svn_ra_dav__search_for_starting_props(&rsrc, &lopped_path,
 
776
                                                sess, url, pool));
774
777
  
775
778
  vcc = apr_hash_get(rsrc->propset, SVN_RA_DAV__PROP_VCC, APR_HASH_KEY_STRING);
776
779
  if (vcc == NULL)
800
803
     the VCC...  We are expected to return a URI decoded relative
801
804
     path, so decode the lopped path first. */
802
805
  my_bc_relative = svn_path_join(relative_path->data,
803
 
                                 svn_path_uri_decode (lopped_path, pool),
 
806
                                 svn_path_uri_decode(lopped_path, pool),
804
807
                                 pool);
805
808
 
806
809
  /* if they want the relative path (could be, they're just trying to find
844
847
      /* Get the Baseline from the DAV:checked-in value, then fetch its
845
848
         DAV:baseline-collection property. */
846
849
      /* ### should wrap this with info about rsrc==VCC */
847
 
      SVN_ERR( svn_ra_dav__get_one_prop(&baseline, sess, vcc->data, NULL,
848
 
                                        &svn_ra_dav__checked_in_prop, pool) );
 
850
      SVN_ERR(svn_ra_dav__get_one_prop(&baseline, sess, vcc->data, NULL,
 
851
                                       &svn_ra_dav__checked_in_prop, pool));
849
852
 
850
853
      /* ### do we want to optimize the props we fetch, based on what the
851
854
         ### user asked for? i.e. omit version-name if latest_rev is NULL */
852
 
      SVN_ERR( svn_ra_dav__get_props_resource(&rsrc, sess, 
853
 
                                              baseline->data, NULL,
854
 
                                              which_props, pool) );
 
855
      SVN_ERR(svn_ra_dav__get_props_resource(&rsrc, sess, 
 
856
                                             baseline->data, NULL,
 
857
                                             which_props, pool));
855
858
    }
856
859
  else
857
860
    {
865
868
 
866
869
      /* ### do we want to optimize the props we fetch, based on what the
867
870
         ### user asked for? i.e. omit version-name if latest_rev is NULL */
868
 
      SVN_ERR( svn_ra_dav__get_props_resource(&rsrc, sess, vcc->data, label,
869
 
                                              which_props, pool) );
 
871
      SVN_ERR(svn_ra_dav__get_props_resource(&rsrc, sess, vcc->data, label,
 
872
                                             which_props, pool));
870
873
    }
871
874
  
872
875
  /* Return the baseline rsrc, which now contains whatever set of
892
895
  /* Go fetch a BASELINE_RSRC that contains specific properties we
893
896
     want.  This routine will also fill in BC_RELATIVE as best it
894
897
     can. */
895
 
  SVN_ERR (svn_ra_dav__get_baseline_props(&my_bc_rel,
896
 
                                          &baseline_rsrc,
897
 
                                          sess,
898
 
                                          url,
899
 
                                          revision,
900
 
                                          baseline_props, /* specific props */
901
 
                                          pool));
 
898
  SVN_ERR(svn_ra_dav__get_baseline_props(&my_bc_rel,
 
899
                                         &baseline_rsrc,
 
900
                                         sess,
 
901
                                         url,
 
902
                                         revision,
 
903
                                         baseline_props, /* specific props */
 
904
                                         pool));
902
905
 
903
906
  /* baseline_rsrc now points at the Baseline. We will checkout from
904
907
     the DAV:baseline-collection.  The revision we are checking out is
944
947
      const char *full_bc_url = svn_path_url_add_component(my_bc_url->data, 
945
948
                                                           my_bc_rel.data, 
946
949
                                                           pool);
947
 
      SVN_ERR( svn_ra_dav__get_props_resource(&rsrc, sess, full_bc_url,
948
 
                                              NULL, starting_props, pool) );
 
950
      SVN_ERR(svn_ra_dav__get_props_resource(&rsrc, sess, full_bc_url,
 
951
                                             NULL, starting_props, pool));
949
952
      *is_dir = rsrc->is_collection;
950
953
    }
951
954
 
1009
1012
 
1010
1013
 
1011
1014
svn_error_t *
1012
 
svn_ra_dav__do_proppatch (svn_ra_dav__session_t *ras,
1013
 
                          const char *url,
1014
 
                          apr_hash_t *prop_changes,
1015
 
                          apr_array_header_t *prop_deletes,
1016
 
                          apr_hash_t *extra_headers,
1017
 
                          apr_pool_t *pool)
 
1015
svn_ra_dav__do_proppatch(svn_ra_dav__session_t *ras,
 
1016
                         const char *url,
 
1017
                         apr_hash_t *prop_changes,
 
1018
                         apr_array_header_t *prop_deletes,
 
1019
                         apr_hash_t *extra_headers,
 
1020
                         apr_pool_t *pool)
1018
1021
{
1019
1022
  ne_request *req;
1020
1023
  int code;
1117
1120
                          apr_pool_t *pool)
1118
1121
{
1119
1122
  svn_ra_dav__session_t *ras = session->priv;
1120
 
  const char *url = ras->url;
 
1123
  const char *url = ras->url->data;
1121
1124
  svn_error_t *err;
1122
1125
  svn_boolean_t is_dir;
1123
1126
 
1166
1169
  else if (err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND)
1167
1170
    {
1168
1171
 
1169
 
      svn_error_clear (err);
 
1172
      svn_error_clear(err);
1170
1173
      *kind = svn_node_none;
1171
1174
      return SVN_NO_ERROR;
1172
1175
    }
1183
1186
                    apr_pool_t *pool)
1184
1187
{
1185
1188
  svn_ra_dav__session_t *ras = session->priv;
1186
 
  const char *url = ras->url;
 
1189
  const char *url = ras->url->data;
1187
1190
  const char *final_url;
1188
1191
  apr_hash_t *resources;
1189
1192
  apr_hash_index_t *hi;
1211
1214
          if (err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND)
1212
1215
            {
1213
1216
              /* easy out: */
1214
 
              svn_error_clear (err);
 
1217
              svn_error_clear(err);
1215
1218
              *dirent = NULL;
1216
1219
              return SVN_NO_ERROR;
1217
1220
            }
1231
1234
      if (err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND)
1232
1235
        {
1233
1236
          /* easy out: */
1234
 
          svn_error_clear (err);
 
1237
          svn_error_clear(err);
1235
1238
          *dirent = NULL;
1236
1239
          return SVN_NO_ERROR;
1237
1240
        }
1242
1245
  /* Copying parsing code from svn_ra_dav__get_dir() here.  The hash
1243
1246
     of resources only contains one item, but there's no other way to
1244
1247
     get the item. */
1245
 
  for (hi = apr_hash_first (pool, resources); hi; hi = apr_hash_next (hi))
 
1248
  for (hi = apr_hash_first(pool, resources); hi; hi = apr_hash_next(hi))
1246
1249
    {
1247
1250
      const void *key;
1248
1251
      void *val;
1252
1255
      apr_hash_index_t *h;
1253
1256
      svn_dirent_t *entry;
1254
1257
 
1255
 
      apr_hash_this (hi, &key, NULL, &val);
 
1258
      apr_hash_this(hi, &key, NULL, &val);
1256
1259
      childname =  key;
1257
1260
      resource = val;
1258
1261
          
1259
 
      entry = apr_pcalloc (pool, sizeof(*entry));
 
1262
      entry = apr_pcalloc(pool, sizeof(*entry));
1260
1263
          
1261
1264
      entry->kind = resource->is_collection ? svn_node_dir : svn_node_file;
1262
1265
 
1271
1274
        }
1272
1275
          
1273
1276
      /* does this resource contain any 'dead' properties? */
1274
 
      for (h = apr_hash_first (pool, resource->propset);
1275
 
           h; h = apr_hash_next (h))
 
1277
      for (h = apr_hash_first(pool, resource->propset);
 
1278
           h; h = apr_hash_next(h))
1276
1279
        {
1277
1280
          const void *kkey;
1278
1281
          void *vval;
1279
 
          apr_hash_this (h, &kkey, NULL, &vval);
 
1282
          apr_hash_this(h, &kkey, NULL, &vval);
1280
1283
          
1281
1284
          if (strncmp((const char *)kkey, SVN_DAV_PROP_NS_CUSTOM,
1282
1285
                      sizeof(SVN_DAV_PROP_NS_CUSTOM) - 1) == 0)
1298
1301
                             SVN_RA_DAV__PROP_CREATIONDATE,
1299
1302
                             APR_HASH_KEY_STRING);
1300
1303
      if (propval != NULL)
1301
 
        SVN_ERR( svn_time_from_cstring(&(entry->time),
1302
 
                                       propval->data, pool) );
 
1304
        SVN_ERR(svn_time_from_cstring(&(entry->time),
 
1305
                                      propval->data, pool));
1303
1306
      
1304
1307
      propval = apr_hash_get(resource->propset,
1305
1308
                             SVN_RA_DAV__PROP_CREATOR_DISPLAYNAME,