download_checkmd5.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 
00003 # Software License Agreement (BSD License)
00004 #
00005 # Copyright (c) 2009, Willow Garage, Inc.
00006 # All rights reserved.
00007 #
00008 # Redistribution and use in source and binary forms, with or without
00009 # modification, are permitted provided that the following conditions
00010 # are met:
00011 #
00012 # * Redistributions of source code must retain the above copyright
00013 # notice, this list of conditions and the following disclaimer.
00014 # * Redistributions in binary form must reproduce the above
00015 # copyright notice, this list of conditions and the following
00016 # disclaimer in the documentation and/or other materials provided
00017 # with the distribution.
00018 # * Neither the name of Willow Garage, Inc. nor the names of its
00019 # contributors may be used to endorse or promote products derived
00020 # from this software without specific prior written permission.
00021 #
00022 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00023 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00024 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00025 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00026 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00027 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00028 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00029 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00030 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00031 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00032 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00033 # POSSIBILITY OF SUCH DAMAGE.
00034 
00035 
00036 NAME="download_checkmd5.py"
00037 
00038 import urllib, hashlib, os, sys
00039 from optparse import OptionParser
00040 
00041 def main():
00042   parser = OptionParser(usage="usage: %prog URI dest [md5sum]", prog=NAME)
00043   options, args = parser.parse_args()
00044   md5sum = None
00045   if len(args) == 2:
00046     uri, dest = args
00047   elif len(args) == 3:
00048     uri, dest, md5sum = args
00049   else:
00050     parser.error("wrong number of arguments")
00051 
00052   # Create intermediate directories as necessary, #2970
00053   d = os.path.dirname(dest)
00054   if len(d) and not os.path.exists(d):
00055     os.makedirs(d)
00056 
00057   fresh = False
00058   if not os.path.exists(dest):
00059     sys.stdout.write('[rosbuild] Downloading %s to %s...'%(uri, dest))
00060     sys.stdout.flush()
00061     urllib.urlretrieve(uri, dest)
00062     sys.stdout.write('Done\n')
00063     fresh = True
00064 
00065   if md5sum:
00066     m = hashlib.md5(open(dest).read())
00067     d = m.hexdigest()
00068 
00069     print '[rosbuild] Checking md5sum on %s'%(dest)
00070   
00071     if d != md5sum:
00072       if not fresh:
00073         print '[rosbuild] WARNING: md5sum mismatch (%s != %s); re-downloading file %s'%(d, md5sum, dest)
00074         os.remove(dest)
00075 
00076         # Try one more time
00077         urllib.urlretrieve(uri, dest)
00078         m = hashlib.md5(open(dest).read())
00079         d = m.hexdigest()
00080     
00081       if d != md5sum:
00082         print '[rosbuild] ERROR: md5sum mismatch (%s != %s) on %s; aborting'%(d, md5sum, dest)
00083         return 1
00084 
00085   return 0
00086 
00087 
00088 if __name__ == '__main__':
00089   sys.exit(main())


rosbuild
Author(s): Brian Gerkey, Troy Straszheim, Morgan Quigley
autogenerated on Thu Aug 27 2015 14:46:44