Browse Source

Fixed #30184 -- Removed ellipsis characters from shell output strings.

Partially reverted 50b8493581fea3d7137dd8db33bac7008868d23a (refs #29654)
to avoid a crash when the user shell doesn't support non-ASCII characters.
Dan Davis 6 years ago
parent
commit
2bd8df243a

+ 1 - 1
django/contrib/gis/utils/layermapping.py

@@ -596,7 +596,7 @@ class LayerMapping:
 
                 # Printing progress information, if requested.
                 if progress and num_feat % progress_interval == 0:
-                    stream.write('Processed %d features, saved %d \n' % (num_feat, num_saved))
+                    stream.write('Processed %d features, saved %d ...\n' % (num_feat, num_saved))
 
             # Only used for status output purposes -- incremental saving uses the
             # values returned here.

+ 2 - 2
django/core/management/commands/loaddata.py

@@ -226,7 +226,7 @@ class Command(BaseCommand):
         ser_fmts = serializers.get_public_serializer_formats() if ser_fmt is None else [ser_fmt]
 
         if self.verbosity >= 2:
-            self.stdout.write("Loading '%s' fixtures" % fixture_name)
+            self.stdout.write("Loading '%s' fixtures..." % fixture_name)
 
         if os.path.isabs(fixture_name):
             fixture_dirs = [os.path.dirname(fixture_name)]
@@ -247,7 +247,7 @@ class Command(BaseCommand):
         fixture_files = []
         for fixture_dir in fixture_dirs:
             if self.verbosity >= 2:
-                self.stdout.write("Checking %s for fixtures" % humanize(fixture_dir))
+                self.stdout.write("Checking %s for fixtures..." % humanize(fixture_dir))
             fixture_files_in_dir = []
             path = os.path.join(fixture_dir, fixture_name)
             for candidate in glob.iglob(glob.escape(path) + '*'):

+ 5 - 5
django/core/management/commands/migrate.py

@@ -262,7 +262,7 @@ class Command(BaseCommand):
             if action == "apply_start":
                 if compute_time:
                     self.start = time.time()
-                self.stdout.write("  Applying %s" % migration, ending="")
+                self.stdout.write("  Applying %s..." % migration, ending="")
                 self.stdout.flush()
             elif action == "apply_success":
                 elapsed = " (%.3fs)" % (time.time() - self.start) if compute_time else ""
@@ -273,7 +273,7 @@ class Command(BaseCommand):
             elif action == "unapply_start":
                 if compute_time:
                     self.start = time.time()
-                self.stdout.write("  Unapplying %s" % migration, ending="")
+                self.stdout.write("  Unapplying %s..." % migration, ending="")
                 self.stdout.flush()
             elif action == "unapply_success":
                 elapsed = " (%.3fs)" % (time.time() - self.start) if compute_time else ""
@@ -284,7 +284,7 @@ class Command(BaseCommand):
             elif action == "render_start":
                 if compute_time:
                     self.start = time.time()
-                self.stdout.write("  Rendering model states", ending="")
+                self.stdout.write("  Rendering model states...", ending="")
                 self.stdout.flush()
             elif action == "render_success":
                 elapsed = " (%.3fs)" % (time.time() - self.start) if compute_time else ""
@@ -320,7 +320,7 @@ class Command(BaseCommand):
 
         # Create the tables for each model
         if self.verbosity >= 1:
-            self.stdout.write("  Creating tables\n")
+            self.stdout.write("  Creating tables...\n")
         with connection.schema_editor() as editor:
             for app_name, model_list in manifest.items():
                 for model in model_list:
@@ -337,7 +337,7 @@ class Command(BaseCommand):
 
             # Deferred SQL is executed when exiting the editor's context.
             if self.verbosity >= 1:
-                self.stdout.write("    Running deferred SQL\n")
+                self.stdout.write("    Running deferred SQL...\n")
 
     @staticmethod
     def describe_operation(operation, backwards):

+ 1 - 1
django/core/management/commands/runserver.py

@@ -113,7 +113,7 @@ class Command(BaseCommand):
         shutdown_message = options.get('shutdown_message', '')
         quit_command = 'CTRL-BREAK' if sys.platform == 'win32' else 'CONTROL-C'
 
-        self.stdout.write("Performing system checks\n\n")
+        self.stdout.write("Performing system checks...\n\n")
         self.check(display_num_errors=True)
         # Need to check migrations here, so can't use the
         # requires_migrations_check attribute.

+ 1 - 1
django/core/management/commands/showmigrations.py

@@ -124,7 +124,7 @@ class Command(BaseCommand):
             for parent in sorted(node.parents):
                 out.append("%s.%s" % parent.key)
             if out:
-                return "  (%s)" % ", ".join(out)
+                return " ... (%s)" % ", ".join(out)
             return ""
 
         for node in plan:

+ 1 - 1
django/core/management/commands/squashmigrations.py

@@ -139,7 +139,7 @@ class Command(BaseCommand):
             new_operations = operations
         else:
             if self.verbosity > 0:
-                self.stdout.write(self.style.MIGRATE_HEADING("Optimizing"))
+                self.stdout.write(self.style.MIGRATE_HEADING("Optimizing..."))
 
             optimizer = MigrationOptimizer()
             new_operations = optimizer.optimize(operations, migration.app_label)

+ 4 - 4
django/db/backends/base/creation.py

@@ -45,7 +45,7 @@ class BaseDatabaseCreation:
             if keepdb:
                 action = "Using existing"
 
-            self.log('%s test database for alias %s' % (
+            self.log('%s test database for alias %s...' % (
                 action,
                 self._get_database_display_str(verbosity, test_database_name),
             ))
@@ -182,7 +182,7 @@ class BaseDatabaseCreation:
                 if autoclobber or confirm == 'yes':
                     try:
                         if verbosity >= 1:
-                            self.log('Destroying old test database for alias %s' % (
+                            self.log('Destroying old test database for alias %s...' % (
                                 self._get_database_display_str(verbosity, test_database_name),
                             ))
                         cursor.execute('DROP DATABASE %(dbname)s' % test_db_params)
@@ -206,7 +206,7 @@ class BaseDatabaseCreation:
             action = 'Cloning test database'
             if keepdb:
                 action = 'Using existing clone'
-            self.log('%s for alias %s' % (
+            self.log('%s for alias %s...' % (
                 action,
                 self._get_database_display_str(verbosity, source_database_name),
             ))
@@ -248,7 +248,7 @@ class BaseDatabaseCreation:
             action = 'Destroying'
             if keepdb:
                 action = 'Preserving'
-            self.log('%s test database for alias %s' % (
+            self.log('%s test database for alias %s...' % (
                 action,
                 self._get_database_display_str(verbosity, test_database_name),
             ))

+ 1 - 1
django/db/backends/mysql/creation.py

@@ -44,7 +44,7 @@ class DatabaseCreation(BaseDatabaseCreation):
                     return
                 try:
                     if verbosity >= 1:
-                        self.log('Destroying old test database for alias %s' % (
+                        self.log('Destroying old test database for alias %s...' % (
                             self._get_database_display_str(verbosity, target_database_name),
                         ))
                     cursor.execute('DROP DATABASE %(dbname)s' % test_db_params)

+ 9 - 9
django/db/backends/oracle/creation.py

@@ -44,7 +44,7 @@ class DatabaseCreation(BaseDatabaseCreation):
                             "Type 'yes' to delete it, or 'no' to cancel: " % parameters['user'])
                     if autoclobber or confirm == 'yes':
                         if verbosity >= 1:
-                            self.log("Destroying old test database for alias '%s'" % self.connection.alias)
+                            self.log("Destroying old test database for alias '%s'..." % self.connection.alias)
                         try:
                             self._execute_test_db_destruction(cursor, parameters, verbosity)
                         except DatabaseError as e:
@@ -69,7 +69,7 @@ class DatabaseCreation(BaseDatabaseCreation):
 
             if self._test_user_create():
                 if verbosity >= 1:
-                    self.log('Creating test user')
+                    self.log('Creating test user...')
                 try:
                     self._create_test_user(cursor, parameters, verbosity, keepdb)
                 except Exception as e:
@@ -84,10 +84,10 @@ class DatabaseCreation(BaseDatabaseCreation):
                     if autoclobber or confirm == 'yes':
                         try:
                             if verbosity >= 1:
-                                self.log('Destroying old test user')
+                                self.log('Destroying old test user...')
                             self._destroy_test_user(cursor, parameters, verbosity)
                             if verbosity >= 1:
-                                self.log('Creating test user')
+                                self.log('Creating test user...')
                             self._create_test_user(cursor, parameters, verbosity, keepdb)
                         except Exception as e:
                             self.log('Got an error recreating the test user: %s' % e)
@@ -143,14 +143,14 @@ class DatabaseCreation(BaseDatabaseCreation):
             if autoclobber or confirm == 'yes':
                 try:
                     if verbosity >= 1:
-                        self.log('Destroying old test user')
+                        self.log('Destroying old test user...')
                     self._destroy_test_user(cursor, parameters, verbosity)
                 except Exception as e:
                     self.log('Got an error destroying the test user: %s' % e)
                     sys.exit(2)
                 try:
                     if verbosity >= 1:
-                        self.log("Destroying old test database for alias '%s'" % self.connection.alias)
+                        self.log("Destroying old test database for alias '%s'..." % self.connection.alias)
                     self._execute_test_db_destruction(cursor, parameters, verbosity)
                 except Exception as e:
                     self.log('Got an error destroying the test database: %s' % e)
@@ -176,11 +176,11 @@ class DatabaseCreation(BaseDatabaseCreation):
         with self._maindb_connection.cursor() as cursor:
             if self._test_user_create():
                 if verbosity >= 1:
-                    self.log('Destroying test user')
+                    self.log('Destroying test user...')
                 self._destroy_test_user(cursor, parameters, verbosity)
             if self._test_database_create():
                 if verbosity >= 1:
-                    self.log('Destroying test database tables')
+                    self.log('Destroying test database tables...')
                 self._execute_test_db_destruction(cursor, parameters, verbosity)
         self._maindb_connection.close()
 
@@ -262,7 +262,7 @@ class DatabaseCreation(BaseDatabaseCreation):
     def _destroy_test_user(self, cursor, parameters, verbosity):
         if verbosity >= 2:
             self.log('_destroy_test_user(): user=%s' % parameters['user'])
-            self.log('Be patient. This can take some time')
+            self.log('Be patient. This can take some time...')
         statements = [
             'DROP USER %(user)s CASCADE',
         ]

+ 1 - 1
django/db/backends/postgresql/creation.py

@@ -67,7 +67,7 @@ class DatabaseCreation(BaseDatabaseCreation):
             except Exception:
                 try:
                     if verbosity >= 1:
-                        self.log('Destroying old test database for alias %s' % (
+                        self.log('Destroying old test database for alias %s...' % (
                             self._get_database_display_str(verbosity, target_database_name),
                         ))
                     cursor.execute('DROP DATABASE %(dbname)s' % test_db_params)

+ 2 - 2
django/db/backends/sqlite3/creation.py

@@ -25,7 +25,7 @@ class DatabaseCreation(BaseDatabaseCreation):
         if not self.is_in_memory_db(test_database_name):
             # Erase the old test database
             if verbosity >= 1:
-                self.log('Destroying old test database for alias %s' % (
+                self.log('Destroying old test database for alias %s...' % (
                     self._get_database_display_str(verbosity, test_database_name),
                 ))
             if os.access(test_database_name, os.F_OK):
@@ -64,7 +64,7 @@ class DatabaseCreation(BaseDatabaseCreation):
                 if keepdb:
                     return
                 if verbosity >= 1:
-                    self.log('Destroying old test database for alias %s' % (
+                    self.log('Destroying old test database for alias %s...' % (
                         self._get_database_display_str(verbosity, target_database_name),
                     ))
                 try:

+ 1 - 1
django/db/models/query.py

@@ -248,7 +248,7 @@ class QuerySet:
     def __repr__(self):
         data = list(self[:REPR_OUTPUT_SIZE + 1])
         if len(data) > REPR_OUTPUT_SIZE:
-            data[-1] = "…(remaining elements truncated)…"
+            data[-1] = "...(remaining elements truncated)..."
         return '<%s %r>' % (self.__class__.__name__, data)
 
     def __len__(self):

+ 1 - 1
django/db/models/sql/query.py

@@ -597,7 +597,7 @@ class Query:
             # really make sense (or return consistent value sets). Not worth
             # the extra complexity when you can write a real query instead.
             if self.extra and rhs.extra:
-                raise ValueError("When merging querysets using 'or', you cannot have extra(select=) on both sides.")
+                raise ValueError("When merging querysets using 'or', you cannot have extra(select=...) on both sides.")
         self.extra.update(rhs.extra)
         extra_select_mask = set()
         if self.extra_select_mask is not None:

+ 1 - 1
docs/intro/tutorial01.txt

@@ -131,7 +131,7 @@ You'll see the following output on the command line:
 
 .. parsed-literal::
 
-    Performing system checks
+    Performing system checks...
 
     System check identified no issues (0 silenced).
 

+ 2 - 2
docs/intro/tutorial02.txt

@@ -338,8 +338,8 @@ Now, run :djadmin:`migrate` again to create those model tables in your database:
     Operations to perform:
       Apply all migrations: admin, auth, contenttypes, polls, sessions
     Running migrations:
-      Rendering model states DONE
-      Applying polls.0001_initial OK
+      Rendering model states... DONE
+      Applying polls.0001_initial... OK
 
 The :djadmin:`migrate` command takes all the migrations that haven't been
 applied (Django tracks which ones are applied using a special table in your

+ 4 - 4
docs/intro/tutorial05.txt

@@ -203,7 +203,7 @@ In the terminal, we can run our test:
 
 and you'll see something like::
 
-    Creating test database for alias 'default'
+    Creating test database for alias 'default'...
     System check identified no issues (0 silenced).
     F
     ======================================================================
@@ -218,7 +218,7 @@ and you'll see something like::
     Ran 1 test in 0.001s
 
     FAILED (failures=1)
-    Destroying test database for alias 'default'
+    Destroying test database for alias 'default'...
 
 What happened is this:
 
@@ -257,14 +257,14 @@ past:
 
 and run the test again::
 
-    Creating test database for alias 'default'
+    Creating test database for alias 'default'...
     System check identified no issues (0 silenced).
     .
     ----------------------------------------------------------------------
     Ran 1 test in 0.001s
 
     OK
-    Destroying test database for alias 'default'
+    Destroying test database for alias 'default'...
 
 After identifying a bug, we wrote a test that exposes it and corrected the bug
 in the code so our test passes.

+ 2 - 2
docs/topics/migrations.txt

@@ -135,8 +135,8 @@ database to make sure they work as expected::
     Operations to perform:
       Apply all migrations: books
     Running migrations:
-      Rendering model states DONE
-      Applying books.0003_auto OK
+      Rendering model states... DONE
+      Applying books.0003_auto... OK
 
 Once the migration is applied, commit the migration and the models change
 to your version control system as a single commit - that way, when other

+ 1 - 1
docs/topics/testing/overview.txt

@@ -279,7 +279,7 @@ When you run your tests, you'll see a number of messages as the test runner
 prepares itself. You can control the level of detail of these messages with the
 ``verbosity`` option on the command line::
 
-    Creating test database
+    Creating test database...
     Creating table myapp_animal
     Creating table myapp_mineral
 

+ 18 - 18
tests/migrations/test_commands.py

@@ -41,7 +41,7 @@ class MigrateTests(MigrationTestBase):
         call_command('migrate', 'migrations', '0001', verbosity=1, stdout=stdout, no_color=True)
         stdout = stdout.getvalue()
         self.assertIn('Target specific migration: 0001_initial, from migrations', stdout)
-        self.assertIn('Applying migrations.0001_initial OK', stdout)
+        self.assertIn('Applying migrations.0001_initial... OK', stdout)
         # The correct tables exist
         self.assertTableExists("migrations_author")
         self.assertTableExists("migrations_tribble")
@@ -57,7 +57,7 @@ class MigrateTests(MigrationTestBase):
         call_command('migrate', 'migrations', 'zero', verbosity=1, stdout=stdout, no_color=True)
         stdout = stdout.getvalue()
         self.assertIn('Unapply all migrations: migrations', stdout)
-        self.assertIn('Unapplying migrations.0002_second OK', stdout)
+        self.assertIn('Unapplying migrations.0002_second... OK', stdout)
         # Tables are gone
         self.assertTableNotExists("migrations_author")
         self.assertTableNotExists("migrations_tribble")
@@ -157,7 +157,7 @@ class MigrateTests(MigrationTestBase):
             call_command("migrate", "migrations", "0001", fake_initial=True, stdout=out, verbosity=1)
             call_command("migrate", "migrations", "0001", fake_initial=True, verbosity=0, database="other")
         self.assertIn(
-            "migrations.0001_initial faked",
+            "migrations.0001_initial... faked",
             out.getvalue().lower()
         )
         # Run migrations all the way
@@ -208,8 +208,8 @@ class MigrateTests(MigrationTestBase):
         with mock.patch('django.core.management.color.supports_color', lambda *args: False):
             call_command("migrate", "migrations", "0002", fake_initial=True, stdout=out, verbosity=1)
         value = out.getvalue().lower()
-        self.assertIn("migrations.0001_initial faked", value)
-        self.assertIn("migrations.0002_second faked", value)
+        self.assertIn("migrations.0001_initial... faked", value)
+        self.assertIn("migrations.0002_second... faked", value)
         # Fake an apply
         call_command("migrate", "migrations", fake=True, verbosity=0)
         # Unmigrate everything
@@ -271,8 +271,8 @@ class MigrateTests(MigrationTestBase):
         call_command("showmigrations", format='plan', stdout=out, verbosity=2)
         self.assertEqual(
             "[ ]  migrations.0001_initial\n"
-            "[ ]  migrations.0003_third  (migrations.0001_initial)\n"
-            "[ ]  migrations.0002_second  (migrations.0001_initial, migrations.0003_third)\n",
+            "[ ]  migrations.0003_third ... (migrations.0001_initial)\n"
+            "[ ]  migrations.0002_second ... (migrations.0001_initial, migrations.0003_third)\n",
             out.getvalue().lower()
         )
         call_command("migrate", "migrations", "0003", verbosity=0)
@@ -290,8 +290,8 @@ class MigrateTests(MigrationTestBase):
         call_command("showmigrations", format='plan', stdout=out, verbosity=2)
         self.assertEqual(
             "[x]  migrations.0001_initial\n"
-            "[x]  migrations.0003_third  (migrations.0001_initial)\n"
-            "[ ]  migrations.0002_second  (migrations.0001_initial, migrations.0003_third)\n",
+            "[x]  migrations.0003_third ... (migrations.0001_initial)\n"
+            "[ ]  migrations.0002_second ... (migrations.0001_initial, migrations.0003_third)\n",
             out.getvalue().lower()
         )
 
@@ -410,10 +410,10 @@ class MigrateTests(MigrationTestBase):
         call_command("showmigrations", format='plan', stdout=out, verbosity=2)
         self.assertEqual(
             "[ ]  migrations.1_auto\n"
-            "[ ]  migrations.2_auto  (migrations.1_auto)\n"
-            "[ ]  migrations.3_squashed_5  (migrations.2_auto)\n"
-            "[ ]  migrations.6_auto  (migrations.3_squashed_5)\n"
-            "[ ]  migrations.7_auto  (migrations.6_auto)\n",
+            "[ ]  migrations.2_auto ... (migrations.1_auto)\n"
+            "[ ]  migrations.3_squashed_5 ... (migrations.2_auto)\n"
+            "[ ]  migrations.6_auto ... (migrations.3_squashed_5)\n"
+            "[ ]  migrations.7_auto ... (migrations.6_auto)\n",
             out.getvalue().lower()
         )
 
@@ -434,10 +434,10 @@ class MigrateTests(MigrationTestBase):
         call_command("showmigrations", format='plan', stdout=out, verbosity=2)
         self.assertEqual(
             "[x]  migrations.1_auto\n"
-            "[x]  migrations.2_auto  (migrations.1_auto)\n"
-            "[x]  migrations.3_squashed_5  (migrations.2_auto)\n"
-            "[ ]  migrations.6_auto  (migrations.3_squashed_5)\n"
-            "[ ]  migrations.7_auto  (migrations.6_auto)\n",
+            "[x]  migrations.2_auto ... (migrations.1_auto)\n"
+            "[x]  migrations.3_squashed_5 ... (migrations.2_auto)\n"
+            "[ ]  migrations.6_auto ... (migrations.3_squashed_5)\n"
+            "[ ]  migrations.7_auto ... (migrations.6_auto)\n",
             out.getvalue().lower()
         )
 
@@ -659,7 +659,7 @@ class MigrateTests(MigrationTestBase):
             self.assertGreater(len(execute.mock_calls), 2)
         stdout = stdout.getvalue()
         self.assertIn('Synchronize unmigrated apps: unmigrated_app_syncdb', stdout)
-        self.assertIn('Creating tables', stdout)
+        self.assertIn('Creating tables...', stdout)
         table_name = truncate_name('unmigrated_app_syncdb_classroom', connection.ops.max_name_length())
         self.assertIn('Creating table %s' % table_name, stdout)