git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 0/5] gitweb: Some code cleanups (up to perlcritic --stern)

From
Jakub Narebski <jnareb@gmail.com>
Date
May 10, 2009, 00:03 UTC
Message-ID
<200905100203.51744.jnareb@gmail.com>

The following series consist of some code cleanups for gitweb.perl. They're based on suggestions by perlcritic (Perl::Critic). Most policy modules are in turn based on Damian Conway's book "Perl Best Practices" (PBP).

This series was inspired by similar series of patches for git-send-email by
Bill Pemberton:
  Subject: [PATCH 0/6] cleanups for git-send-email
  Msg-Id: <1241010743-7020-1-git-send-email-wfp5p@virginia.edu>
  URL: http://thread.gmane.org/gmane.comp.version-control.git/117881

Not all suggestions by perlcritic were implemented (or, to be more exact, by its online version at http://perlcritic.com, which is running Perl-Critic version 1.096).

Below there is list of perlcritic suggestions, sorted by severity (gentle, stern, harsh, cruel, brutal): first list of patches in series which applied perlcritic suggestions, then suggestions not applied, with short explanation why they were not used.

This series deals with suggestion with severity level >= 4 (gentle and stern suggestions); perlcritic suggestions with severity level >= 3 (harsh) are in the works - but there are many more rules, and they are also more subjective.

Shortlog (part 1/2):
=================
Jakub Narebski (3):
  gitweb: Remove function prototypes
  gitweb: Do not use bareword filehandles
  gitweb: Always use three argument form of open

All of those are for severity gentle (5). The following policies (suggestions) with severity 5 were not implemented:

* Perl::Critic::Policy::ValuesAndExpressions::ProhibitLeadingZeros
  Write 'oct(755)' instead of '0755'.
  We know what we are doing here; besides above Perl::Critic policy
  has exceptions for chmod, mkdir, sysopen, umask, and we use octal
  numbers for filemode.
* Perl::Critic::Policy::Subroutines::ProhibitExplicitReturnUndef
  Return failure with bare 'return' instead of 'return undef'.
  First, this is a matter of taste; second, this would require more
  detailed review. So it is left as it is... for now.
* Perl::Critic::Policy::Subroutines::ProhibitNestedSubs
  Declaring a named sub inside another named sub does not prevent
  the inner sub from being global.
  This is more about possibility of mismatched expectations.
Shortlog (part 2/2):
=================
Jakub Narebski (1):
  gitweb: Localize magic variable $/
  gitweb: Use block form of map/grep in a few cases more

All of those are for severity stern (4). The following policies (suggestions) with severity 4 were not implemented:

* Perl::Critic::Policy::Subroutines::RequireArgUnpacking
  Always unpack @_ first.
  This requires careful handling (wrapper functions are exception of
  this policy, but the tool does not detect it), and in most cases
  this is the matter of the following techique:
     my $a = shift;
     my ($b, $c) = @_;
  which could be improved.
* Perl::Critic::Policy::Subroutines::RequireFinalReturn
  End every path through a subroutine with an explicit return statement.
  This is I think the matter of taste; note that this policy is not to
  be followed blindly, according to documentation. I think that all
  functions that do not return would be procedures (void as return
  type) in C.
* Perl::Critic::Policy::ValuesAndExpressions::ProhibitConstantPragma
  Don't use 'constant FOO => 15', because it doesn't interpolate, but
  the Readonly module.
  The constants S_IFINVALID and S_IFGITLINK we declare follow naming
  of filemode constants S_IFMT and S_IXUSR from Fcntl module we use in
  our code.
* Perl::Critic::Policy::InputOutput::RequireBriefOpen
  Close filehandles as soon as possible after opening them
  (because fFilehandles are a finite resource).
  
  In gitweb we use very small number of filehandles concurrently;
  usually only one filehandle is open.  On the other hand for bigger
  output we try to stream it.
* Perl::Critic::Policy::ValuesAndExpressions::ProhibitMixedBooleanOperators
  Don't mix high- and low-precedence booleans.
  The code in question is list form of magic "-|" open ... or die ...,
  where one of arguments uses '||' to set default value.  This is
  intended, and not that cryptic.
Diffstat:
=========
 gitweb/gitweb.perl |   72 ++++++++++++++++++++++++++--------------------------
 1 files changed, 36 insertions(+), 36 deletions(-)
-- 
Jakub Narebski
ShadeHawk on #git
Next: Jakub Narebski
Message 1 of 16 in “gitweb: Some code cleanups (up to perlcritic --stern)”
  1. 0/5 gitweb: Some code cleanups (up to perlcritic --stern)Jakub Narebski, May 10, 2009
  2. 1/5 gitweb: Remove function prototypesJakub Narebski, May 10, 2009
  3. Jakub NarebskiMay 10, 2009
  4. 2/5 gitweb: Do not use bareword filehandlesJakub Narebski, May 10, 2009
  5. Petr BaudisMay 10, 2009
  6. Jakub NarebskiMay 10, 2009
  7. 2/5 gitweb: Do not use bareword filehandlesJakub Narebski, May 11, 2009
  8. 3/5 gitweb: Always use three argument form of openJakub Narebski, May 10, 2009
  9. 3/5 gitweb: Always use three argument form of openJakub Narebski, May 11, 2009
  10. 4/5 gitweb: Localize magic variable $/Jakub Narebski, May 10, 2009
  11. 5/5 gitweb: Use block form of map/grep in a few cases moreJakub Narebski, May 10, 2009
  12. Junio C HamanoMay 11, 2009
  13. Jakub NarebskiMay 11, 2009
  14. Junio C HamanoMay 11, 2009
  15. Daniel PittmanMay 11, 2009
  16. Jakub NarebskiMay 11, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.