Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

SVN: Hook Script to Avoid Filenames with spaces and special chars

Posted on 2010-08-19
4
Medium Priority
?
772 Views
Last Modified: 2013-11-15
Hello,

Is there any SVN Hook script for Linux to avoid users committing filenames with spaces and special chars?

Thanks!

 
0
Comment
Question by:andremta
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 3

Expert Comment

by:ssapkota
ID: 33478780
0
 

Author Comment

by:andremta
ID: 33478949
Hello,

Thanks for the reply.

That script checks also inside its source code, no the file name itself. Maybe is too complex.

Anything more simple?

0
 
LVL 3

Accepted Solution

by:
ssapkota earned 2000 total points
ID: 33479961
Here a quick rough edit to the code in the above link. This should work for you. I haven't tested it though (I don't have SVN repo to test it now).

#!/bin/env python
" Example Subversion pre-commit hook. "

def command_output(cmd):
  " Capture a command's standard output. "
  import subprocess
  return subprocess.Popen(
      cmd.split(), stdout=subprocess.PIPE).communicate()[0]

def files_changed(look_cmd):
  """ List the files added or updated by this transaction.

"svnlook changed" gives output like:
  U   trunk/file1.cpp
  A   trunk/file2.cpp
  """
  def filename(line):
      return line[4:]
  def added_or_updated(line):
      return line and line[0] in ("A", "U")
  return [
      filename(line)
      for line in command_output(look_cmd % "changed").split("\n")
      if added_or_updated(line)]

def check_filesname(look_cmd):
  " Check for invalid filenames. \
  It allows Alphabets, Numbers, dashes(-), Underscores(_) and dots(.) "
  allowedRegex=re.compile("^[a-zA-Z0-9\-_\.]*$")
  invalid_files = [
      ff for ff in files_changed(look_cmd)
      if not allowedRegex.match(ff)]
  if len(invalid_files) > 0:
      sys.stderr.write("The following files have invalid filename:\n%s\n"
                       % "\n".join(invalid_files))
  return len(invalid_files)

def main():
  usage = """usage: %prog REPOS TXN

Run pre-commit options on a repository transaction."""
  from optparse import OptionParser
  parser = OptionParser(usage=usage)
  parser.add_option("-r", "--revision",
                    help="Test mode. TXN actually refers to a revision.",
                    action="store_true", default=False)
  errors = 0
  try:
      (opts, (repos, txn_or_rvn)) = parser.parse_args()
      look_opt = ("--transaction", "--revision")[opts.revision]
      look_cmd = "svnlook %s %s %s %s" % (
          "%s", repos, look_opt, txn_or_rvn)
      errors += check_filesname(look_cmd)
  except:
      parser.print_help()
      errors += 1
  return errors

if __name__ == "__main__":
  import sys
  sys.exit(main())
0
 

Author Closing Comment

by:andremta
ID: 33483170
Excellent!
0

Featured Post

Enroll in September's Course of the Month

This month’s featured course covers 16 hours of training in installation, management, and deployment of VMware vSphere virtualization environments. It's free for Premium Members, Team Accounts, and Qualified Experts!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will inform Clients about common and important expectations from the freelancers (Experts) who are looking at your Gig.
We live in a world of interfaces like the one in the title picture. VBA also allows to use interfaces which offers a lot of possibilities. This article describes how to use interfaces in VBA and how to work around their bugs.
Six Sigma Control Plans
Starting up a Project
Suggested Courses

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question