[server] fix --help output when redirected through pipes, fix bug 4049

This commit is contained in:
Fabio Erculiani
2013-03-08 12:55:59 +01:00
parent 113f9d74b7
commit a1e59c352f
35 changed files with 85 additions and 35 deletions

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.i18n import _
@@ -62,7 +63,7 @@ Entropy package scope is given by the following tuple:
try:
nsargs = parser.parse_args(self._args)
except IOError as err:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
# setup atoms variable before spawning commit
self._ask = not nsargs.quick

View File

@@ -12,6 +12,7 @@
import os
import sys
import argparse
import functools
from entropy.i18n import _, ngettext
from entropy.output import bold, purple, darkgreen, blue, teal
@@ -90,7 +91,7 @@ over just use the *--no-copy* switch.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._from_branch = nsargs.frombranch
self._to_branch = nsargs.branch

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.output import darkgreen, blue
from entropy.i18n import _
@@ -101,7 +102,7 @@ will be accepted and new repository data will be uploaded.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._sync = nsargs.sync
return self._call_locked, [self._bump, nsargs.repo]

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.output import darkgreen, blue
from entropy.i18n import _
@@ -94,7 +95,7 @@ another branch, iuse *eit branch*.
try:
nsargs = parser.parse_args(self._args)
except IOError as err:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
return self._call_locked, [self._checkout, nsargs.repo]

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.output import darkgreen, blue, purple
from entropy.i18n import _
@@ -114,7 +115,7 @@ This commands makes possible to manually force a cleanup.
try:
nsargs = parser.parse_args(self._args)
except IOError as err:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._ask = not nsargs.quick
if nsargs.days is not None:

View File

@@ -10,7 +10,7 @@
"""
from entropy.i18n import _
from entropy.output import darkgreen, print_error
from entropy.output import darkgreen, print_error, print_generic
from entropy.exceptions import PermissionDenied
from entropy.server.interfaces import Server
from entropy.core.settings.base import SystemSettings
@@ -48,6 +48,22 @@ class EitCommand(object):
"""
raise NotImplementedError()
def print_help(self, parser):
"""
ArgumentParser.print_help wrapper that properly handles
UTF-8 encoding in a fault-tolerant way. Also see bug #4049.
@param parser: an ArgumentParser object
@type parser: argparse.ArgumentParser
"""
class _Printer(object):
@classmethod
def write(self, string):
print_generic(string)
parser.print_help(file=_Printer)
def parse(self):
"""
Parse the actual arguments and return

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.i18n import _
from entropy.output import darkgreen, teal, brown, \
@@ -116,7 +117,7 @@ If you would like to selectively add certain packages, please see
try:
nsargs = parser.parse_args(self._args)
except IOError as err:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._interactive = nsargs.interactive
if not self._interactive:

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.output import darkgreen, blue, brown, bold, red, purple, teal
from entropy.i18n import _
@@ -112,7 +113,7 @@ Copy packages from source repository to destination repository.
try:
nsargs = parser.parse_args(self._args)
except IOError as err:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._source = nsargs.source[0]
self._dest = nsargs.dest[0]

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
from entropy.const import etpConst
@@ -70,7 +71,7 @@ non-permanent way.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._packages += nsargs.packages
return self._call_locked, [self._deps, nsargs.inrepo]

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
from entropy.output import bold, purple, darkgreen, blue, brown, teal
@@ -71,7 +72,7 @@ package owners), please use *eit own*.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._quiet = nsargs.quiet
self._packages += nsargs.packages

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
@@ -74,7 +75,7 @@ For a reverse dependency graph, please see *eit revgraph*.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._quiet = nsargs.quiet
self._packages += nsargs.packages

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.i18n import _
from entropy.output import darkgreen, teal
@@ -102,7 +103,7 @@ So, please setup your repository there and only then run *eit init <repo>*.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._ask = not nsargs.quick
return self._call_locked, [self._init, nsargs.repo[0]]

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.i18n import _
from entropy.output import teal, purple
@@ -75,7 +76,7 @@ repositories as much as you can.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._packages += nsargs.packages
return self._call_locked, [self._inject, nsargs.to]

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.output import blue, purple, darkgreen, bold, brown, teal, \
darkred
@@ -118,7 +119,7 @@ package and repository files through *gnupg*.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._nsargs = nsargs
return self._call_locked, [nsargs.func, nsargs.repo]

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
from entropy.output import brown, teal, purple, darkgreen
@@ -76,7 +77,7 @@ If you wonder what's inside a repository, you've found the right tool.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._quiet = nsargs.quiet
self._verbose = nsargs.verbose

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
from entropy.output import darkgreen, brown, purple, blue, darkred
@@ -123,7 +124,7 @@ repositories.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._client = nsargs.client
self._repository_id = nsargs.repo[0]

View File

@@ -13,6 +13,7 @@ import sys
import os
import subprocess
import argparse
import functools
from entropy.i18n import _
@@ -59,7 +60,7 @@ This commands opens repository ChangeLog.bz2 using *bzless*.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
return self._call_locked, [self._log, nsargs.repo]

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
from entropy.output import purple
@@ -70,7 +71,7 @@ If you are interested in a simple text search, please see *eit search*.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._quiet = nsargs.quiet
self._packages += nsargs.packages

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.i18n import _
@@ -75,7 +76,7 @@ back in. This tool does exactly this.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._ask = not nsargs.quick
self._merge_branch = nsargs.branch

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.i18n import _
@@ -68,7 +69,7 @@ then is removed from source.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._source = nsargs.source
self._dest = nsargs.dest

View File

@@ -13,6 +13,7 @@ import sys
import os
import errno
import argparse
import functools
import tempfile
import codecs
@@ -86,7 +87,7 @@ list notice-board titles for user consumption.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._repository_id = nsargs.repo
return self._call_locked, [nsargs.func, self._repository_id]

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.i18n import _
from entropy.output import purple, darkgreen, teal, bold
@@ -81,7 +82,7 @@ please use *eit files*.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._quiet = nsargs.quiet
self._quiet = nsargs.quiet

View File

@@ -13,6 +13,7 @@ import sys
import os
import errno
import argparse
import functools
import tempfile
import codecs
@@ -104,7 +105,7 @@ doing.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._repository_id = nsargs.repo
return self._call_locked, [self._pkgmove, self._repository_id]

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
import tempfile
import codecs
@@ -123,7 +124,7 @@ repository) by pulling updated data.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._ask = not nsargs.quick
self._all = nsargs.all

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
import tempfile
import codecs
@@ -133,7 +134,7 @@ repository) by pushing updated data.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._ask = not nsargs.quick
self._all = nsargs.all

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.output import purple, darkgreen, bold, brown, teal
from entropy.const import etpConst
@@ -144,7 +145,7 @@ tools.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._repository_id = nsargs.inrepo
self._quiet = nsargs.quiet

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
import codecs
from entropy.const import etpConst
@@ -83,7 +84,7 @@ Manage (add, remove, list) configured repositories.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._nsargs = nsargs
return self._call_locked, [nsargs.func, None]

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
from entropy.output import purple, darkgreen, brown, teal
@@ -72,7 +73,7 @@ Remove a package from repository. It's no-brainer actually.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._ask = not nsargs.quick
self._nodeps = nsargs.nodeps

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
@@ -57,7 +58,7 @@ The package must be already available in the queried repository.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
# setup atoms variable before spawning commit
self._packages = nsargs.packages[:]

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.i18n import _
from entropy.output import darkgreen, teal
@@ -57,7 +58,7 @@ Show current repository, its branch and configured mirrors.
parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
return self._call_locked, [self._void, None]
def _void(self, entropy_server):

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
from entropy.output import darkgreen
@@ -104,7 +105,7 @@ re-fetching the remote version available on mirrors.
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._local = nsargs.local
self._ask = not nsargs.quick

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
@@ -77,7 +78,7 @@ For a direct dependency graph, please see *eit graph*.
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._quiet = nsargs.quiet
self._packages += nsargs.packages

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
from entropy.output import purple
@@ -77,7 +78,7 @@ If you are interested in dependency string matching, please see
try:
nsargs = parser.parse_args(self._args)
except IOError:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._quiet = nsargs.quiet
self._packages += nsargs.packages

View File

@@ -12,6 +12,7 @@
import sys
import os
import argparse
import functools
from entropy.const import etpConst
from entropy.i18n import _
@@ -97,7 +98,7 @@ Show repository status (such as: *configured mirrors*,
nsargs = parser.parse_args(self._args)
except IOError as err:
sys.stderr.write("%s\n" % (err,))
return parser.print_help, []
return functools.partial(self.print_help, parser), []
return self._call_locked, [self._status, nsargs.repo]

View File

@@ -11,6 +11,7 @@
"""
import sys
import argparse
import functools
from entropy.i18n import _
from entropy.output import teal, purple
@@ -106,7 +107,7 @@ Toolset containing all the Entropy Server built-in QA tests available.
try:
nsargs = parser.parse_args(self._args)
except IOError as err:
return parser.print_help, []
return functools.partial(self.print_help, parser), []
self._nsargs = nsargs
return self._call_locked, [nsargs.func, None]