def setUp(self): """Load a Subversion repository""" self.temper = utils.Temper() (self.repos, self.repos_path, self.repos_uri) = self.temper.alloc_known_repo( 'trac/versioncontrol/tests/svnrepos.dump', suffix='-repository') self.fs = repos.fs(self.repos) self.rev = fs.youngest_rev(self.fs) self.tmpfile = None self.unistr = u'⊙_ʘ' tmpfd, self.tmpfile = mkstemp() tmpfp = os.fdopen(tmpfd, "wb") # Use a unicode file to ensure proper non-ascii handling. tmpfp.write(self.unistr.encode('utf8')) tmpfp.close() clientctx = client.svn_client_create_context() clientctx.log_msg_func3 = client.svn_swig_py_get_commit_log_func clientctx.log_msg_baton3 = self.log_message_func providers = [ client.svn_client_get_simple_provider(), client.svn_client_get_username_provider(), ] clientctx.auth_baton = core.svn_auth_open(providers) commitinfo = client.import2(self.tmpfile, urljoin(self.repos_uri +"/", "trunk/UniTest.txt"), True, True, clientctx) self.commitedrev = commitinfo.revision
def test_client_ctx_baton_lifetime(self): pool = core.Pool() temp_client_ctx = client.svn_client_create_context(pool) # We keep track of these objects in separate variables here # because you can't get a PyObject back out of a PY_AS_VOID field test_object1 = lambda *args: "message 1" test_object2 = lambda *args: "message 2" # Verify that the refcount of a Python object is incremented when # you insert it into a PY_AS_VOID field. temp_client_ctx.log_msg_baton2 = test_object1 test_object1 = weakref.ref(test_object1) self.assertNotEqual(test_object1(), None) # Verify that the refcount of the previous Python object is decremented # when a PY_AS_VOID field is replaced. temp_client_ctx.log_msg_baton2 = test_object2 self.assertEqual(test_object1(), None) # Verify that the reference count of the new Python object (which # replaced test_object1) was incremented. test_object2 = weakref.ref(test_object2) self.assertNotEqual(test_object2(), None) # Verify that the reference count of test_object2 is decremented when # test_client_ctx is destroyed. temp_client_ctx = None self.assertEqual(test_object2(), None)
def setup_client_ctx(config_dir): # Ensure that the configuration directory exists. core.svn_config_ensure(config_dir) # Fetch the configuration (and 'config' bit thereof). cfg = core.svn_config_get_config(config_dir) config = cfg.get(core.SVN_CONFIG_CATEGORY_CONFIG) # Here's the compat-sensitive part: try to use # svn_cmdline_create_auth_baton(), and fall back to making our own # if that fails. try: auth_baton = core.svn_cmdline_create_auth_baton( 1, None, None, config_dir, 1, 1, config, None) except AttributeError: auth_baton = core.svn_auth_open([ client.svn_client_get_simple_provider(), client.svn_client_get_username_provider(), client.svn_client_get_ssl_server_trust_file_provider(), client.svn_client_get_ssl_client_cert_file_provider(), client.svn_client_get_ssl_client_cert_pw_file_provider(), ]) if config_dir is not None: core.svn_auth_set_parameter(auth_baton, core.SVN_AUTH_PARAM_CONFIG_DIR, config_dir) # Create, setup, and return the client context baton. ctx = client.svn_client_create_context() ctx.config = cfg ctx.auth_baton = auth_baton return ctx
def setup_client_ctx(config_dir): # Ensure that the configuration directory exists. core.svn_config_ensure(config_dir) # Fetch the configuration (and 'config' bit thereof). cfg = core.svn_config_get_config(config_dir) config = cfg.get(core.SVN_CONFIG_CATEGORY_CONFIG) # Here's the compat-sensitive part: try to use # svn_cmdline_create_auth_baton(), and fall back to making our own # if that fails. try: auth_baton = core.svn_cmdline_create_auth_baton(1, None, None, config_dir, 1, 1, config, None) except AttributeError: auth_baton = core.svn_auth_open([ client.svn_client_get_simple_provider(), client.svn_client_get_username_provider(), client.svn_client_get_ssl_server_trust_file_provider(), client.svn_client_get_ssl_client_cert_file_provider(), client.svn_client_get_ssl_client_cert_pw_file_provider(), ]) if config_dir is not None: core.svn_auth_set_parameter(auth_baton, core.SVN_AUTH_PARAM_CONFIG_DIR, config_dir) # Create, setup, and return the client context baton. ctx = client.svn_client_create_context() ctx.config = cfg ctx.auth_baton = auth_baton return ctx
def __init__(self, local_url, rev, first_rev, include_text, config_dir, encoding): self.idx = -1 self.first_rev = first_rev self.blame_data = [] self.include_text = include_text self.encoding = encoding ctx = client.svn_client_create_context() core.svn_config_ensure(config_dir) ctx.config = core.svn_config_get_config(config_dir) ctx.auth_baton = core.svn_auth_open([]) try: # TODO: Is this use of FIRST_REV always what we want? Should we # pass 1 here instead and do filtering later? client.blame2( local_url, _rev2optrev(rev), _rev2optrev(first_rev), _rev2optrev(rev), self._blame_cb, ctx, ) except core.SubversionException as e: if e.apr_err == core.SVN_ERR_CLIENT_IS_BINARY_FILE: raise vclib.NonTextualFileContents raise
def test_client_ctx_baton_lifetime(self): pool = core.Pool() temp_client_ctx = client.svn_client_create_context(pool) # We keep track of these objects in separate variables here # because you can't get a PyObject back out of a PY_AS_VOID field test_object1 = lambda *args: b"message 1" test_object2 = lambda *args: b"message 2" # Verify that the refcount of a Python object is incremented when # you insert it into a PY_AS_VOID field. temp_client_ctx.log_msg_baton2 = test_object1 test_object1 = weakref.ref(test_object1) self.assertNotEqual(test_object1(), None) # Verify that the refcount of the previous Python object is decremented # when a PY_AS_VOID field is replaced. temp_client_ctx.log_msg_baton2 = test_object2 self.assertEqual(test_object1(), None) # Verify that the reference count of the new Python object (which # replaced test_object1) was incremented. test_object2 = weakref.ref(test_object2) self.assertNotEqual(test_object2(), None) # Verify that the reference count of test_object2 is decremented when # test_client_ctx is destroyed. temp_client_ctx = None self.assertEqual(test_object2(), None)
def open(self): # Setup the client context baton, complete with non-prompting authstuffs. # TODO: svn_cmdline_setup_auth_baton() is mo' better (when available) core.svn_config_ensure(self.config_dir) self.ctx = client.svn_client_create_context() self.ctx.auth_baton = core.svn_auth_open([ client.svn_client_get_simple_provider(), client.svn_client_get_username_provider(), client.svn_client_get_ssl_server_trust_file_provider(), client.svn_client_get_ssl_client_cert_file_provider(), client.svn_client_get_ssl_client_cert_pw_file_provider(), ]) self.ctx.config = core.svn_config_get_config(self.config_dir) if self.config_dir is not None: core.svn_auth_set_parameter(self.ctx.auth_baton, core.SVN_AUTH_PARAM_CONFIG_DIR, self.config_dir) ra_callbacks = ra.svn_ra_callbacks_t() ra_callbacks.auth_baton = self.ctx.auth_baton self.ra_session = ra.svn_ra_open(self.rootpath, ra_callbacks, None, self.ctx.config) self.youngest = ra.svn_ra_get_latest_revnum(self.ra_session) self._dirent_cache = { } self._revinfo_cache = { } # See if a universal read access determination can be made. if self.auth and self.auth.check_universal_access(self.name) == 1: self.auth = None
def open(self): # Setup the client context baton, complete with non-prompting authstuffs. # TODO: svn_cmdline_setup_auth_baton() is mo' better (when available) core.svn_config_ensure(self.config_dir) self.ctx = client.svn_client_create_context() self.ctx.auth_baton = core.svn_auth_open([ client.svn_client_get_simple_provider(), client.svn_client_get_username_provider(), client.svn_client_get_ssl_server_trust_file_provider(), client.svn_client_get_ssl_client_cert_file_provider(), client.svn_client_get_ssl_client_cert_pw_file_provider(), ]) self.ctx.config = core.svn_config_get_config(self.config_dir) if self.config_dir is not None: core.svn_auth_set_parameter(self.ctx.auth_baton, core.SVN_AUTH_PARAM_CONFIG_DIR, self.config_dir) ra_callbacks = ra.svn_ra_callbacks_t() ra_callbacks.auth_baton = self.ctx.auth_baton self.ra_session = ra.svn_ra_open(self.rootpath, ra_callbacks, None, self.ctx.config) self.youngest = ra.svn_ra_get_latest_revnum(self.ra_session) self._dirent_cache = {} self._revinfo_cache = {} # See if a universal read access determination can be made. if self.auth and self.auth.check_universal_access(self.name) == 1: self.auth = None
def __init__(self, repositoryPath, pool): self.context = client.svn_client_create_context() configDirectory = core.svn_config_ensure( '', pool) self.context.config = core.svn_config_get_config(configDirectory, pool) self.pool = pool self.repos_ptr = repos.svn_repos_open(repositoryPath, pool) self.fsob = repos.svn_repos_fs(self.repos_ptr) # Directories we've added to the repository. self.addedDirectories = {} self.addedDirectories["/"] = 1
def setUp(self): """Load a Subversion repository""" self.client_ctx = client.svn_client_create_context() providers = [ client.svn_client_get_simple_provider(), client.svn_client_get_username_provider(), ] self.client_ctx.auth_baton = core.svn_auth_open(providers)
def main(): try: url, peg_revision, start_revision, end_revision = parse_args( sys.argv[1:]) except Exception as e: sys.stderr.write("""Usage: %s URL[@PEG-REV] [START-REV[:END-REV]] Trace the history of URL@PEG-REV, printing the location(s) of its existence between START-REV and END-REV. If START-REV is not provided, the entire history of URL@PEG-REV back to its origin will be displayed. If provided, START-REV must not be younger than PEG-REV. If END-REV is provided, it must not be younger than START-REV. (This is a wrapper around Subversion's svn_ra_get_location_segments() API.) ERROR: %s """ % (os.path.basename(sys.argv[0]), str(e))) sys.exit(1) core.svn_config_ensure(None) ctx = client.svn_client_create_context() ctx.config = core.svn_config_get_config(None) # Make sure that these are at the start of the list, so passwords from # gnome-keyring / kwallet are checked before asking for new passwords. providers = core.svn_auth_get_platform_specific_client_providers( ctx.config['config'], None) providers.extend([ client.get_simple_provider(), core.svn_auth_get_ssl_server_trust_file_provider(), core.svn_auth_get_simple_prompt_provider(prompt_func_simple_prompt, 2), core.svn_auth_get_ssl_server_trust_prompt_provider( prompt_func_ssl_unknown_cert), client.get_username_provider(), client.get_ssl_server_trust_file_provider(), client.get_ssl_client_cert_file_provider(), client.get_ssl_client_cert_pw_file_provider(), ]) ctx.auth_baton = core.svn_auth_open(providers) if hasattr(core, 'svn_auth_set_gnome_keyring_unlock_prompt_func'): core.svn_auth_set_gnome_keyring_unlock_prompt_func( ctx.auth_baton, prompt_func_gnome_keyring_prompt) ra_callbacks = ra.callbacks_t() ra_callbacks.auth_baton = ctx.auth_baton ra_session = ra.open(url, ra_callbacks, None, ctx.config) ra.get_location_segments(ra_session, "", peg_revision, start_revision, end_revision, printer)
def setup_client_ctx(config_dir): # Ensure that the configuration directory exists. core.svn_config_ensure(config_dir) # Fetch the configuration (and 'config' bit thereof). cfg = core.svn_config_get_config(config_dir) config = cfg.get(core.SVN_CONFIG_CATEGORY_CONFIG) auth_baton = core.svn_cmdline_create_auth_baton(1, None, None, config_dir, 1, 1, config, None) # Create, setup, and return the client context baton. ctx = client.svn_client_create_context() ctx.config = cfg ctx.auth_baton = auth_baton return ctx
def main(): try: opts, args = my_getopt(sys.argv[1:], "h?f", ["help", "fix"]) except Exception as e: sys.stderr.write(""" Improperly used """) sys.exit(1) if len(args) == 1: wcpath = args[0] wcpath = os.path.abspath(wcpath) else: usage() sys.exit(1) fix = 0 current_path = os.getcwd() hash_file = os.path.join(current_path, ".hashfile") newmergeinfo_file = os.path.join(current_path, ".newmergeinfo") temp_pool = core.svn_pool_create() ctx = client.svn_client_create_context(temp_pool) depth = core.svn_depth_infinity revision = core.svn_opt_revision_t() revision.kind = core.svn_opt_revision_unspecified for opt, values in opts: if opt == "--help" or opt in ("-h", "-?"): usage() elif opt == "--fix" or opt == "-f": fix = 1 # Check for any local modifications in the working copy check_local_modifications(wcpath, temp_pool) parsed_original_mergeinfo = get_original_mergeinfo(wcpath, revision, depth, ctx, temp_pool) repo_root = client.svn_client_root_url_from_path(wcpath, ctx, temp_pool) core.svn_config_ensure(None) if fix == 0: sanitize_mergeinfo(parsed_original_mergeinfo, repo_root, wcpath, ctx, hash_file, newmergeinfo_file, temp_pool) if fix == 1: fix_sanitized_mergeinfo(parsed_original_mergeinfo, repo_root, wcpath, ctx, hash_file, newmergeinfo_file, temp_pool)
def main(): try: url, peg_revision, start_revision, end_revision = parse_args(sys.argv[1:]) except Exception as e: sys.stderr.write("""Usage: %s URL[@PEG-REV] [START-REV[:END-REV]] Trace the history of URL@PEG-REV, printing the location(s) of its existence between START-REV and END-REV. If START-REV is not provided, the entire history of URL@PEG-REV back to its origin will be displayed. If provided, START-REV must not be younger than PEG-REV. If END-REV is provided, it must not be younger than START-REV. (This is a wrapper around Subversion's svn_ra_get_location_segments() API.) ERROR: %s """ % (os.path.basename(sys.argv[0]), str(e))) sys.exit(1) core.svn_config_ensure(None) ctx = client.svn_client_create_context() ctx.config = core.svn_config_get_config(None) # Make sure that these are at the start of the list, so passwords from # gnome-keyring / kwallet are checked before asking for new passwords. providers = core.svn_auth_get_platform_specific_client_providers(ctx.config['config'], None) providers.extend([ client.get_simple_provider(), core.svn_auth_get_ssl_server_trust_file_provider(), core.svn_auth_get_simple_prompt_provider(prompt_func_simple_prompt, 2), core.svn_auth_get_ssl_server_trust_prompt_provider(prompt_func_ssl_unknown_cert), client.get_username_provider(), client.get_ssl_server_trust_file_provider(), client.get_ssl_client_cert_file_provider(), client.get_ssl_client_cert_pw_file_provider(), ]) ctx.auth_baton = core.svn_auth_open(providers) if hasattr(core, 'svn_auth_set_gnome_keyring_unlock_prompt_func'): core.svn_auth_set_gnome_keyring_unlock_prompt_func(ctx.auth_baton, prompt_func_gnome_keyring_prompt) ra_callbacks = ra.callbacks_t() ra_callbacks.auth_baton = ctx.auth_baton ra_session = ra.open(url, ra_callbacks, None, ctx.config) ra.get_location_segments(ra_session, "", peg_revision, start_revision, end_revision, printer)
def __init__(self, local_url, rev, first_rev, config_dir): self.idx = -1 self.first_rev = first_rev self.blame_data = [] ctx = client.svn_client_create_context() core.svn_config_ensure(config_dir) ctx.config = core.svn_config_get_config(config_dir) ctx.auth_baton = core.svn_auth_open([]) try: ### TODO: Is this use of FIRST_REV always what we want? Should we ### pass 1 here instead and do filtering later? client.blame2(local_url, _rev2optrev(rev), _rev2optrev(first_rev), _rev2optrev(rev), self._blame_cb, ctx) except core.SubversionException, e: _fix_subversion_exception(e) if e.apr_err == core.SVN_ERR_CLIENT_IS_BINARY_FILE: raise vclib.NonTextualFileContents raise
def setUp(self): """Set up authentication and client context""" self.client_ctx = client.svn_client_create_context() self.assertEquals(self.client_ctx.log_msg_baton2, None) self.assertEquals(self.client_ctx.log_msg_func2, None) self.assertEquals(self.client_ctx.log_msg_baton3, None) self.assertEquals(self.client_ctx.log_msg_func3, None) self.client_ctx.log_msg_func3 = client.svn_swig_py_get_commit_log_func self.client_ctx.log_msg_baton3 = self.log_message_func self.log_message_func_calls = 0 self.log_message = None self.changed_paths = None self.change_author = None providers = [ client.svn_client_get_simple_provider(), client.svn_client_get_username_provider(), ] self.client_ctx.auth_baton = core.svn_auth_open(providers)
def setUp(self): """Set up authentication and client context""" self.client_ctx = client.svn_client_create_context() self.assertEquals(self.client_ctx.log_msg_baton2, None) self.assertEquals(self.client_ctx.log_msg_func2, None) self.assertEquals(self.client_ctx.log_msg_baton3, None) self.assertEquals(self.client_ctx.log_msg_func3, None) self.client_ctx.log_msg_func3 = client.svn_swig_py_get_commit_log_func self.client_ctx.log_msg_baton3 = self.log_message_func self.log_message_func_calls = 0 self.log_message = None self.changed_paths = None self.change_author = None providers = [client.svn_client_get_simple_provider(), client.svn_client_get_username_provider()] self.client_ctx.auth_baton = core.svn_auth_open(providers) self.temper = utils.Temper() (_, self.repos_path, self.repos_uri) = self.temper.alloc_known_repo( "trac/versioncontrol/tests/svnrepos.dump", suffix="-client" )
def setUp(self): """Set up authentication and client context""" self.client_ctx = client.svn_client_create_context() self.assertEqual(self.client_ctx.log_msg_baton2, None) self.assertEqual(self.client_ctx.log_msg_func2, None) self.assertEqual(self.client_ctx.log_msg_baton3, None) self.assertEqual(self.client_ctx.log_msg_func3, None) self.client_ctx.log_msg_func3 = client.svn_swig_py_get_commit_log_func self.client_ctx.log_msg_baton3 = self.log_message_func self.log_message_func_calls = 0 self.log_message = None self.changed_paths = None self.change_author = None providers = [ client.svn_client_get_simple_provider(), client.svn_client_get_username_provider(), ] self.client_ctx.auth_baton = core.svn_auth_open(providers) self.temper = utils.Temper() (_, self.repos_path, self.repos_uri) = self.temper.alloc_known_repo( 'trac/versioncontrol/tests/svnrepos.dump', suffix='-client')
sys.exit(1) if len(args) == 1: wcpath = args[0] wcpath = os.path.abspath(wcpath) else: usage() sys.exit(1) fix = 0 current_path = os.getcwd() hash_file = os.path.join(current_path, ".hashfile") newmergeinfo_file = os.path.join(current_path, ".newmergeinfo") temp_pool = core.svn_pool_create() ctx = client.svn_client_create_context(temp_pool) depth = core.svn_depth_infinity revision = core.svn_opt_revision_t() revision.kind = core.svn_opt_revision_unspecified for opt, values in opts: if opt == "--help" or opt in ("-h", "-?"): usage() elif opt == "--fix" or opt == "-f": fix = 1 # Check for any local modifications in the working copy check_local_modifications(wcpath, temp_pool) parsed_original_mergeinfo = get_original_mergeinfo(wcpath, revision, depth, ctx, temp_pool)
sys.stderr.write("""Usage: %s URL[@PEG-REV] [START-REV[:END-REV]] Trace the history of URL@PEG-REV, printing the location(s) of its existence between START-REV and END-REV. If START-REV is not provided, the entire history of URL@PEG-REV back to its origin will be displayed. If provided, START-REV must not be younger than PEG-REV. If END-REV is provided, it must not be younger than START-REV. (This is a wrapper around Subversion's svn_ra_get_location_segments() API.) ERROR: %s """ % (os.path.basename(sys.argv[0]), str(e))) sys.exit(1) core.svn_config_ensure(None) ctx = client.svn_client_create_context() ctx.config = core.svn_config_get_config(None) # Make sure that these are at the start of the list, so passwords from # gnome-keyring / kwallet are checked before asking for new passwords. providers = core.svn_auth_get_platform_specific_client_providers(ctx.config['config'], None) providers.extend([ client.get_simple_provider(), core.svn_auth_get_ssl_server_trust_file_provider(), core.svn_auth_get_simple_prompt_provider(prompt_func_simple_prompt, 2), core.svn_auth_get_ssl_server_trust_prompt_provider(prompt_func_ssl_unknown_cert), client.get_username_provider(), client.get_ssl_server_trust_file_provider(), client.get_ssl_client_cert_file_provider(), client.get_ssl_client_cert_pw_file_provider(), ])
sys.stderr.write("""Usage: %s URL[@PEG-REV] [START-REV[:END-REV]] Trace the history of URL@PEG-REV, printing the location(s) of its existence between START-REV and END-REV. If START-REV is not provided, the entire history of URL@PEG-REV back to its origin will be displayed. If provided, START-REV must not be younger than PEG-REV. If END-REV is provided, it must not be younger than START-REV. (This is a wrapper around Subversion's svn_ra_get_location_segments() API.) ERROR: %s """ % (os.path.basename(sys.argv[0]), str(e))) sys.exit(1) core.svn_config_ensure(None) ctx = client.svn_client_create_context() ctx.config = core.svn_config_get_config(None) # Make sure that these are at the start of the list, so passwords from # gnome-keyring / kwallet are checked before asking for new passwords. providers = core.svn_auth_get_platform_specific_client_providers( ctx.config['config'], None) providers.extend([ client.get_simple_provider(), core.svn_auth_get_ssl_server_trust_file_provider(), core.svn_auth_get_simple_prompt_provider(prompt_func_simple_prompt, 2), core.svn_auth_get_ssl_server_trust_prompt_provider( prompt_func_ssl_unknown_cert), client.get_username_provider(), client.get_ssl_server_trust_file_provider(), client.get_ssl_client_cert_file_provider(),