[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 788
  • Last Modified:

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

Hello,

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

Thanks!

 
0
andremta
Asked:
andremta
  • 2
  • 2
1 Solution
 
ssapkotaCommented:
0
 
andremtaAuthor Commented:
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
 
ssapkotaCommented:
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
 
andremtaAuthor Commented:
Excellent!
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now