Solved

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

Posted on 2010-08-19
4
735 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
  • 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 500 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
wordappend challenge 8 149
to update from RHEL 6.0 to 6.8 anything needed other than "yum update"? 7 88
App holding yum lock unable to update my rpm package 1 36
Java Loop 6 49
Whether you’re a college noob or a soon-to-be pro, these tips are sure to help you in your journey to becoming a programming ninja and stand out from the crowd.
If you’re thinking to yourself “That description sounds a lot like two people doing the work that one could accomplish,” you’re not alone.
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

895 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

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now