svn commit: r1926563 - in /subversion/trunk/subversion: libsvn_subr/cmdline.c tests/cmdline/basic_tests.py tests/cmdline/svneditor.py tests/cmdline/svntest/actions.py

[email protected]
Newsgroups gmane.comp.version-control.subversion.svn
Message-ID <[email protected]>
Author: brane
Date: Wed Jun 18 23:50:44 2025
New Revision: 1926563

URL: http://svn.apache.org/viewvc?rev=1926563&view=rev
Log:
Fix fallout from r1925937: command-line tools should be non-interactive
if the standard input is *not* a terminal. Add tests for this case.

* subversion/libsvn_subr/cmdline.c
  (svn_cmdline__be_interactive): Invert the non-interactive condition,
   reverting to the way it worked before r1925937.
   "Just one good bang short of a jackpot!"

* subversion/tests/cmdline/basic_tests.py
  (_basic_commit_common): Rename from basic_commit(), and implement
   test modes with and without using an editor for the log message..
  (basic_commit, basic_commit_use_editor,
   basic_commit_use_editor_force_interactive): New test cases. The
   basic_commit() test has the same semantics as before. The other two
   exercise interaction with an editor to get the log message.
  (test_list): Register the new tests.

* subversion/tests/cmdline/svneditor.py
  (prepend_foo): New edit mode, suitable for editing log messages.

* subversion/tests/cmdline/svntest/actions.py
  (run_and_verify_commit2): Rename from run_and_verify_commit and add
   arguments to decide whether and when to add a log message to the
   svn argument list.
  (run_and_verify_commit): Wrapper for run_and_verify_commit2, preserving
   the old semantics.

Found by: cmpilato

Modified:
    subversion/trunk/subversion/libsvn_subr/cmdline.c
    subversion/trunk/subversion/tests/cmdline/basic_tests.py
    subversion/trunk/subversion/tests/cmdline/svneditor.py
    subversion/trunk/subversion/tests/cmdline/svntest/actions.py

Modified: subversion/trunk/subversion/libsvn_subr/cmdline.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/cmdline.c?rev=1926563&r1=1926562&r2=1926563&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/cmdline.c (original)
+++ subversion/trunk/subversion/libsvn_subr/cmdline.c Wed Jun 18 23:50:44 2025
@@ -1239,7 +1239,7 @@ svn_cmdline__be_interactive(svn_boolean_
    * be interactive if stdin is a terminal.
    * If --force-interactive was passed, always be interactive. */
   if (!force_interactive && !*non_interactive)
-    *non_interactive = svn_cmdline__stdin_is_a_terminal();
+    *non_interactive = !svn_cmdline__stdin_is_a_terminal();
 
   if (force_interactive)
     *non_interactive = FALSE;

Modified: subversion/trunk/subversion/tests/cmdline/basic_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/basic_tests.py?rev=1926563&r1=1926562&r2=1926563&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/basic_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/basic_tests.py Wed Jun 18 23:50:44 2025
@@ -115,11 +115,10 @@ def basic_status(sbox):
 
 #----------------------------------------------------------------------
 
-def basic_commit(sbox):
-  "basic commit command"
-
+def _basic_commit_common(sbox, expected_error=[], *args):
   sbox.build()
   wc_dir = sbox.wc_dir
+  svntest.main.use_editor('prepend_foo')
 
   # Make a couple of local mods to files
   mu_path = sbox.ospath('A/mu')
@@ -128,20 +127,48 @@ def basic_commit(sbox):
   svntest.main.file_append(rho_path, 'new appended text for rho')
 
   # Created expected output tree for 'svn ci'
-  expected_output = wc.State(wc_dir, {
-    'A/mu' : Item(verb='Sending'),
-    'A/D/G/rho' : Item(verb='Sending'),
+  if expected_error:
+    expected_output = []
+  else:
+    expected_output = wc.State(wc_dir, {
+      'A/mu' : Item(verb='Sending'),
+      'A/D/G/rho' : Item(verb='Sending'),
     })
 
   # Create expected status tree; all local revisions should be at 1,
   # but mu and rho should be at revision 2.
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
-  expected_status.tweak('A/mu', 'A/D/G/rho', wc_rev=2)
+  if expected_error:
+    expected_status.tweak('A/mu', 'A/D/G/rho', status='M ')
+  else:
+    expected_status.tweak('A/mu', 'A/D/G/rho', wc_rev=2)
 
-  svntest.actions.run_and_verify_commit(wc_dir,
-                                        expected_output,
-                                        expected_status)
+  prepend_wc_dir_name = len(args) > 0
+  append_log_message = not (len(args) or expected_error)
+  svntest.actions.run_and_verify_commit2(wc_dir,
+                                         expected_output,
+                                         expected_status,
+                                         prepend_wc_dir_name,
+                                         append_log_message,
+                                         expected_error,
+                                         *args)
+
+def basic_commit(sbox):
+  "basic commit command"
+
+  return _basic_commit_common(sbox)
+
+def basic_commit_use_editor(sbox):
+  "basic commit using editor"
+
+  # Note: svn's stdin is not a terminal, so it defaults to non-interactive.
+  return _basic_commit_common(sbox,
+                              "svn: E205001: .* editor .* non-interactive.*")
+
+def basic_commit_use_editor_force_interactive(sbox):
+  "basic commit using editor and force-interactive"
 
+  return _basic_commit_common(sbox, [], '--force-interactive')
 
 #----------------------------------------------------------------------
 
@@ -3355,6 +3382,8 @@ test_list = [ None,
               basic_checkout,
               basic_status,
               basic_commit,
+              basic_commit_use_editor,
+              basic_commit_use_editor_force_interactive,
               basic_update,
               basic_mkdir_url,
               basic_mkdir_url_with_parents,

Modified: subversion/trunk/subversion/tests/cmdline/svneditor.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svneditor.py?rev=1926563&r1=1926562&r2=1926563&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svneditor.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svneditor.py Wed Jun 18 23:50:44 2025
@@ -70,6 +70,9 @@ def foo_to_bar(m):
 def append_foo(m):
     return m + 'foo\n'
 
+def prepend_foo(m):
+    return 'foo\n' + m
+
 def identity(m):
     return m
 

Modified: subversion/trunk/subversion/tests/cmdline/svntest/actions.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/actions.py?rev=1926563&r1=1926562&r2=1926563&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svntest/actions.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svntest/actions.py Wed Jun 18 23:50:44 2025
@@ -1533,6 +1533,15 @@ def process_output_for_commit(output, er
 def run_and_verify_commit(wc_dir_name, output_tree, status_tree,
                           expected_stderr=[],
                           *args):
+  """Like run_and_verify_commit2(), but a log message will always
+  be appended to the command-line arguments."""
+  return run_and_verify_commit2(wc_dir_name, output_tree, status_tree,
+                                False, True, expected_stderr, *args)
+
+def run_and_verify_commit2(wc_dir_name, output_tree, status_tree,
+                           prepend_wc_dir_name=False, append_log_message=True,
+                           expected_stderr=[],
+                           *args):
   """Commit and verify results within working copy WC_DIR_NAME,
   sending ARGS to the commit subcommand.
 
@@ -1541,6 +1550,13 @@ def run_and_verify_commit(wc_dir_name, o
   be compared.  (This is a good way to check that revision numbers
   were bumped.)
 
+  Set PREPEND_WC_DIR_NAME to True to always prepend the working copy
+  directory to the argument list, otherwise it will only be used when
+  ARGS are empty.
+
+  Set APPEND_LOG_MESSAGE to False to prevent adding a log message argument
+  if ARGS doesn't contain one.
+
   EXPECTED_STDERR is handled as in run_and_verify_svn()
 
   Return if successful, raise on failure."""
@@ -1549,10 +1565,11 @@ def run_and_verify_commit(wc_dir_name, o
     output_tree = output_tree.old_tree()
 
   # Commit.
-  if len(args) == 0:
-    args = (wc_dir_name,)
-  if '-m' not in args and '-F' not in args:
-    args = list(args) + ['-m', 'log msg']
+  args = list(args)
+  if len(args) == 0 or prepend_wc_dir_name:
+    args.insert(0, wc_dir_name)
+  if append_log_message and '-m' not in args and '-F' not in args:
+    args.extend(['-m', 'log msg'])
   exit_code, output, errput = run_and_verify_svn(None, expected_stderr,
                                                  'ci', *args)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.