VirtualBox

Changeset 109308 in vbox


Ignore:
Timestamp:
May 16, 2025 9:10:21 PM (9 days ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168914
Message:

svnsync-vbox: Add option to control censoring of author, and set up a parallel repo which gets updated as well.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/apps/svnsync-vbox/main.c

    r108190 r109308  
    4747#define SVNSYNC_PROP_LICENSE            SVNSYNC_PROP_PREFIX "license"
    4848#define SVNSYNC_PROP_DEFAULT_PROCESS    SVNSYNC_PROP_PREFIX "default-process"
     49#define SVNSYNC_PROP_CENSOR_AUTHOR      SVNSYNC_PROP_PREFIX "censor-author"
    4950#define SVNSYNC_PROP_REPLACE_EXTERNALS  SVNSYNC_PROP_PREFIX "replace-externals"
    5051#define SVNSYNC_PROP_REPLACE_LICENSE    SVNSYNC_PROP_PREFIX "replace-license"
     
    9899  svnsync_opt_config_dir,
    99100#ifdef VBOX
     101  svnsync_opt_censor_author,
    100102  svnsync_opt_start_rev,
    101103  svnsync_opt_default_process,
     
    114116#ifdef VBOX
    115117#define SVNSYNC_OPTS_INITIALIZE SVNSYNC_OPTS_DEFAULT, \
     118  svnsync_opt_censor_author, \
    116119  svnsync_opt_start_rev, \
    117120  svnsync_opt_default_process, \
     
    177180                       N_("read user configuration files from directory ARG")},
    178181#ifdef VBOX
     182    {"censor-author",  svnsync_opt_censor_author, 0,
     183                       N_("ignore all revisions before ARG")},
    179184    {"start-rev",      svnsync_opt_start_rev, 1,
    180185                       N_("ignore all revisions before ARG")},
     
    203208  const char *config_dir;
    204209#ifdef VBOX
     210  svn_boolean_t censor_author;
    205211  svn_revnum_t start_rev;
    206212  const char *default_process;
     
    503509#ifdef VBOX
    504510              svn_revnum_t rev_to,
     511              svn_boolean_t censor_author,
    505512#endif /* VBOX */
    506513              svn_boolean_t sync,
     
    534541      else
    535542#ifdef VBOX
    536         if (strncmp(key, SVN_PROP_REVISION_AUTHOR,
    537                     sizeof(SVN_PROP_REVISION_AUTHOR) - 1))
     543        if (   (!censor_author || strncmp(key, SVN_PROP_REVISION_AUTHOR,
     544                                          sizeof(SVN_PROP_REVISION_AUTHOR) - 1))
     545            && ((rev_to != 1) || (rev == rev_to) || strncmp(key, SVN_PROP_REVISION_LOG,
     546                                                            sizeof(SVN_PROP_REVISION_LOG)-1)))
    538547          SVN_ERR(svn_ra_change_rev_prop2(to_session, rev_to, key, NULL, val, subpool));
    539548#else /* !VBOX */
     
    631640  void *wrapped_edit_baton;
    632641  svn_ra_session_t *from_session_prop;
     642  svn_boolean_t censor_author;
    633643  svn_revnum_t current;
    634644  const char *default_process;
     
    666676
    667677  DX(fprintf(stderr, "init set_target_revision %ld\n", target_revision);)
     678  target_revision = 1;
     679  DX(fprintf(stderr, "init override set_target_revision %ld\n", target_revision);)
    668680  SVN_ERR(eb->wrapped_editor->set_target_revision(eb->wrapped_edit_baton,
    669681                                                  target_revision, pool));
     
    681693  initdir_baton_t *db = apr_pcalloc(pool, sizeof(*db));
    682694
    683   DX(fprintf(stderr, "init open_root\n");)
     695  DX(fprintf(stderr, "init open_root %ld\n", base_revision);)
     696  base_revision = 1;
     697  DX(fprintf(stderr, "init override open_root %ld\n", base_revision);)
    684698  SVN_ERR(get_props_sync(eb->from_session_prop, eb->default_process, TRUE,
    685699                         FALSE,"", eb->current, &db->process,
     
    688702  if (db->process)
    689703    SVN_ERR(eb->wrapped_editor->open_root(eb->wrapped_edit_baton,
    690                                           base_revision, pool,
     704                                          base_revision - 1, pool,
    691705                                          &db->wrapped_dir_baton));
    692706
     
    928942                svn_ra_session_t *prop_session,
    929943                const char *default_process,
     944                svn_boolean_t censor_author,
    930945                svn_boolean_t replace_externals,
    931946                svn_boolean_t replace_license,
     
    974989  apr_hash_t *config;
    975990#ifdef VBOX
     991  svn_boolean_t censor_author;
    976992  svn_revnum_t start_rev;
    977993  const char *default_process;
     
    10901106                                  svn_string_create(default_process, pool),
    10911107                                  pool));
     1108  if (baton->censor_author)
     1109    SVN_ERR(svn_ra_change_rev_prop2(to_session, 0,
     1110                                    SVNSYNC_PROP_CENSOR_AUTHOR, NULL,
     1111                                    svn_string_create("", pool), pool));
    10921112  if (baton->replace_externals)
    10931113    SVN_ERR(svn_ra_change_rev_prop2(to_session, 0,
     
    11071127
    11081128#ifdef VBOX
    1109   SVN_ERR(copy_revprops(from_session, to_session, 0, 0, FALSE, pool));
     1129  SVN_ERR(copy_revprops(from_session, to_session, 0, 0, baton->censor_author, FALSE, pool));
    11101130#else /* !VBOX */
    11111131  SVN_ERR(copy_revprops(from_session, to_session, 0, FALSE, pool));
     
    11451165    SVN_ERR(get_init_editor(commit_editor, commit_baton, baton->start_rev,
    11461166                            from_session_prop, baton->default_process,
     1167                            baton->censor_author,
    11471168                            baton->replace_externals, baton->replace_license,
    11481169                            &init_editor, &init_baton, pool));
     
    11611182    SVN_ERR(reporter->finish_report(report_baton, pool));
    11621183  }
     1184
     1185  /* Finally, copy all non-svnsync revprops from rev start_rev of the source
     1186     repos into rev 1 of the dest repos. */
     1187
     1188  SVN_ERR(copy_revprops(from_session, to_session, baton->start_rev, 1, baton->censor_author, FALSE, pool));
    11631189#endif /* VBOX */
    11641190
     
    11961222  baton.start_rev = opt_baton->start_rev;
    11971223  baton.default_process = opt_baton->default_process;
     1224  baton.censor_author = opt_baton->censor_author;
    11981225  baton.replace_externals = opt_baton->replace_externals;
    11991226  baton.replace_license = opt_baton->replace_license;
     
    23962423 * which records the most recently synchronized revision.
    23972424*** VBOX
    2398  * Set START_REV_STR to the properly which records the starting revision.
     2425 * Set START_REV_STR to the property which records the starting revision.
    23992426*** VBOX
    24002427 *
     
    24882515  svn_revnum_t to_latest, copying, last_merged;
    24892516#ifdef VBOX
     2517  svn_string_t *censor_author_str;
     2518  svn_boolean_t censor_author;
    24902519  svn_revnum_t start_rev;
    24912520  svn_string_t *from_url;
     
    25102539  if (!default_process)
    25112540    default_process = svn_string_create("export", pool);
     2541  SVN_ERR(svn_ra_rev_prop(to_session, 0, SVNSYNC_PROP_CENSOR_AUTHOR,
     2542                          &censor_author_str, pool));
     2543  censor_author = !!censor_author_str;
    25122544  SVN_ERR(svn_ra_rev_prop(to_session, 0, SVNSYNC_PROP_REPLACE_EXTERNALS,
    25132545                          &replace_externals_str, pool));
     
    25862618/** @todo fix use of from/to revision numbers. */
    25872619              SVN_ERR(copy_revprops(from_session, to_session,
    2588                                     to_latest, to_latest, TRUE, pool));
     2620                                    to_latest, to_latest, censor_author, TRUE, pool));
    25892621#else /* !VBOX */
    25902622              SVN_ERR(copy_revprops(from_session, to_session,
     
    27692801      {
    27702802        SVN_ERR(copy_revprops(from_session, to_session, current,
    2771                               baton->committed_rev, TRUE, subpool));
     2803                              baton->committed_rev, censor_author, TRUE, subpool));
    27722804
    27732805        /* Add a revision cross-reference revprop visible to the public. */
     
    29242956#ifdef VBOX
    29252957  svn_revnum_t start_rev;
     2958  svn_string_t *censor_author_str;
     2959  svn_boolean_t censor_author;
    29262960#endif /* VBOX */
    29272961
     
    29342968      (APR_EINVAL, NULL, _("Cannot copy revprops for repositories using "
    29352969                           "the start-rev feature (unimplemented)"));
     2970
     2971  SVN_ERR(svn_ra_rev_prop(to_session, 0, SVNSYNC_PROP_CENSOR_AUTHOR,
     2972                          &censor_author_str, pool));
     2973  censor_author = !!censor_author_str;
    29362974#else /* !VBOX */
    29372975  SVN_ERR(open_source_session(&from_session, &last_merged_rev, to_session,
     
    29452983
    29462984#ifdef VBOX
    2947   SVN_ERR(copy_revprops(from_session, to_session, baton->rev, baton->rev, FALSE, pool));
     2985  SVN_ERR(copy_revprops(from_session, to_session, baton->rev, baton->rev, censor_author, FALSE, pool));
    29482986#else /* !VBOX */
    29492987  SVN_ERR(copy_revprops(from_session, to_session, baton->rev, FALSE, pool));
     
    31553193
    31563194#ifdef VBOX
     3195          case svnsync_opt_censor_author:
     3196            opt_baton.censor_author = TRUE;
     3197            break;
     3198
    31573199          case svnsync_opt_start_rev:
    31583200            opt_baton.start_rev = SVN_STR_TO_REV(opt_arg);
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette