def _HardLink(fs, src, dst): """Hard link function for hooking into SCons.Node.FS. Args: fs: Filesystem class to use. src: Source filename to link to. dst: Destination link name to create. Raises: OSError: The link could not be created. """ # A hard link shares file permissions from the source. On Windows, the write # access of the file itself determines whether the file can be deleted # (unlike Linux/Mac, where it's the write access of the containing # directory). So if we made a link from a read-only file, the only way to # delete it would be to make the link writable, which would have the # unintended effect of making the source writable too. # # So if the source is read-only, we can't hard link from it. if not stat.S_IMODE(fs.stat(src)[stat.ST_MODE]) & stat.S_IWRITE: raise OSError('Unsafe to hard-link read-only file: %s' % src) # If the file is writable, only hard-link from it if it was build by SCons. # Those files shouldn't later become read-only. We don't hard-link from # writable files which SCons didn't create, because those could become # read-only (for example, following a 'p4 submit'), which as indicated above # would make our link read-only too. if not fs.File(src).has_builder(): raise OSError('Unsafe to hard-link file not built by SCons: %s' % src) try: win32file.CreateHardLink(dst, src) except win32file.error, msg: # Translate errors into standard OSError which SCons expects. raise OSError(msg)
def windows_hardlink(src, dest): import win32file, pywintypes try: win32file.CreateHardLink(dest, src) except pywintypes.error as e: msg = u'Creating hardlink from %s to %s failed: %%s' % (src, dest) raise Exception(msg % e) src_size = os.path.getsize(src) # We open and close dest, to ensure its directory entry is updated # see http://blogs.msdn.com/b/oldnewthing/archive/2011/12/26/10251026.aspx for i in range(10): # If we are on a network filesystem, we have to wait for some indeterminate time, since # network file systems are the best thing since sliced bread try: if windows_get_size(dest) == src_size: return except EnvironmentError: pass time.sleep(0.3) sz = windows_get_size(dest) if sz != src_size: msg = u'Creating hardlink from %s to %s failed: %%s' % (src, dest) raise Exception(msg % ('hardlink size: %d not the same as source size' % sz))
def hardlink_file(src, dest): if iswindows: import win32file win32file.CreateHardLink(dest, src) if os.path.getsize(dest) != os.path.getsize(src): raise Exception('This apparently can happen on network shares. Sigh.') return os.link(src, dest)
def windows_fast_hardlink(src, dest): import win32file, pywintypes try: win32file.CreateHardLink(dest, src) except pywintypes.error as e: msg = 'Creating hardlink from %s to %s failed: %%s' % (src, dest) raise OSError(msg % e) ssz, dsz = windows_get_size(src), windows_get_size(dest) if ssz != dsz: msg = 'Creating hardlink from %s to %s failed: %%s' % (src, dest) raise OSError(msg % ('hardlink size: %d not the same as source size: %s' % (dsz, ssz)))
def link_local_settings(environment): """ link local_settings.py.environment as local_settings.py """ # check that settings imports local_settings, as it always should, # and if we forget to add that to our project, it could cause mysterious # failures settings_file = os.path.join(env['django_dir'], 'settings.py') with open(settings_file) as settings_file: matching_lines = [ line for line in settings_file if line.find('local_settings') ] if not matching_lines: print "Fatal error: settings.py doesn't seem to import " \ "local_settings.*: %s" % settings_file sys.exit(1) # die if the correct local settings does not exist if not env['quiet']: print "### creating link to local_settings.py" local_settings_env_path = os.path.join(env['django_dir'], 'local_settings.py.' + environment) if not os.path.exists(local_settings_env_path): print "Could not find file to link to: %s" % local_settings_env_path sys.exit(1) files_to_remove = ('local_settings.py', 'local_settings.pyc') for file in files_to_remove: full_path = os.path.join(env['django_dir'], file) if os.path.exists(full_path): os.remove(full_path) source = os.path.join(env['django_dir'], 'local_settings.py.%s' % environment) target = os.path.join(env['django_dir'], 'local_settings.py') if os.name == 'posix': os.symlink('local_settings.py.%s' % environment, target) elif os.name == 'nt': try: import win32file except ImportError: raise Exception("It looks like the PyWin32 extensions are not " + "installed") if os.path.exists(target): os.unlink(target) try: win32file.CreateSymbolicLink(target, source) except NotImplementedError: win32file.CreateHardLink(target, source) else: import shutil shutil.copy2(source, target) env['environment'] = environment
def link_local_settings(environment): """ link local_settings.py.environment as local_settings.py """ if not env['quiet']: print "### creating link to local_settings.py" # check that settings imports local_settings, as it always should, # and if we forget to add that to our project, it could cause mysterious # failures settings_file_path = path.join(env['django_settings_dir'], 'settings.py') if not (path.isfile(settings_file_path)): raise InvalidProjectError( "Fatal error: settings.py doesn't seem to exist") with open(settings_file_path) as settings_file: matching_lines = [ line for line in settings_file if 'local_settings' in line ] if not matching_lines: raise InvalidProjectError( "Fatal error: settings.py doesn't seem to import " "local_settings.*: %s" % settings_file_path) source = path.join(env['django_settings_dir'], 'local_settings.py.%s' % environment) target = path.join(env['django_settings_dir'], 'local_settings.py') # die if the correct local settings does not exist if not path.exists(source): raise InvalidProjectError("Could not find file to link to: %s" % source) # remove any old versions, plus the pyc copy for old_file in (target, target + 'c'): if path.exists(old_file): os.remove(old_file) if os.name == 'posix': os.symlink('local_settings.py.%s' % environment, target) elif os.name == 'nt': try: import win32file except ImportError: raise Exception( "It looks like the PyWin32 extensions are not installed") try: win32file.CreateSymbolicLink(target, source) except NotImplementedError: win32file.CreateHardLink(target, source) else: import shutil shutil.copy2(source, target) env['environment'] = environment
def os_link(src, dst): try: win32file.CreateHardLink(dst, src) # CreateHardLink sometimes succeeds on mapped drives but # following nlinks() returns 1. Check it now and bail out. if nlinks(src) < 2: try: win32file.DeleteFile(dst) except: pass # Fake hardlinking error raise OSError(errno.EINVAL, 'Hardlinking not supported') except pywintypes.error, details: raise OSError(errno.EINVAL, 'target implements hardlinks improperly')
def make_link( source_path, target_path ): # links two paths. Files are hard linked, where as dirs are linked as junctions. if path.isfile(source_path): unlink(target_path) win32file.CreateHardLink(target_path, path.abspath(source_path)) elif path.isdir(source_path): rmdir(target_path) win32file.CreateSymbolicLink(target_path, path.abspath(source_path), 1) else: return 1 # error
def os_link(src, dst): try: win32file.CreateHardLink(dst, src) # CreateHardLink sometimes succeeds on mapped drives but # following nlinks() returns 1. Check it now and bail out. if nlinks(src) < 2: try: win32file.DeleteFile(dst) except: pass # Fake hardlinking error raise WinOSError((18, 'CreateHardLink', 'The system cannot ' 'move the file to a different disk drive')) except pywintypes.error, details: raise WinOSError(details)
def do_cli(manager, options): import win32file import win32serviceutil if hasattr(sys, 'real_prefix'): # We are in a virtualenv, there is some special setup if not os.path.exists(os.path.join(sys.prefix, 'python.exe')): console('Creating a hard link to virtualenv python.exe in root of virtualenv') win32file.CreateHardLink(os.path.join(sys.prefix, 'python.exe'), os.path.join(sys.prefix, 'Scripts', 'python.exe')) argv = options.args if options.help: argv = [] # Hack sys.argv a bit so that we get a better usage message sys.argv[0] = 'flexget service' win32serviceutil.HandleCommandLine(AppServerSvc, argv=['flexget service'] + argv)
import atexit import ConfigParser import logging import os import smtplib import stat import threading import time from zope.sendmail.maildir import Maildir from zope.sendmail.mailer import SMTPMailer import sys if sys.platform == 'win32': import win32file _os_link = lambda src, dst: win32file.CreateHardLink(dst, src, None) else: _os_link = os.link # The longest time sending a file is expected to take. Longer than this and # the send attempt will be assumed to have failed. This means that sending # very large files or using very slow mail servers could result in duplicate # messages sent. MAX_SEND_TIME = 60 * 60 * 3 # The below diagram depicts the operations performed while sending a message in # the ``run`` method of ``QueueProcessorThread``. This sequence of operations # will be performed for each file in the maildir each time the thread "wakes # up" to send messages. # # Any error conditions not depected on the diagram will provoke the catch-all
top_dir = os.path.dirname(os.path.abspath(__file__)) extensions = set(('.pdb', '.dll', '.exe', '.ocx')) files_copied = 0 starttime = datetime.datetime.now() print "Start " + starttime.isoformat() destdir = tempfile.mkdtemp() print "Destination " + destdir for root, dirs, files in os.walk(top_dir): #print dirs for filename in (f for f in files if f[-4:] in extensions): #print os.path.join(root, filename) try: win32file.CreateHardLink(os.path.join(destdir, filename), os.path.join(root, filename)) files_copied += 1 except pywintypes.error as err: if err.winerror != 183: #pywintypes.error (183, 'CreateHardLink', 'Cannot create a file when that file already exists.') raise for exclude in ('.git', '.svn', 'CVS', '.hg', '3rdParty', 'Python27', 'Python26'): if exclude in dirs: dirs.remove(exclude) print "%d files copied" % files_copied startup = win32process.STARTUPINFO() startup.dwFlags += win32process.STARTF_USESTDHANDLES startup.hStdInput = win32file.INVALID_HANDLE_VALUE security_attributes = pywintypes.SECURITY_ATTRIBUTES()
def __init__(self, global_vars, videofile, filename, filefolder, progresbar, proglabel, disctype, title, chapter, threads, seconds, encpass, fix_ac3): """ This class converts a video file to MPEG-1 or MPEG-2 format VIDEOFILE contains the parameters to convert the video FILENAME is the generic file name given by the user FILEFOLDER is the path where all the temporary and finall files will be created PROGRESBAR is the progress bar where the class will show the progress PROGLABEL is the label where the class will show what is it doing DISCTYPE can be dvd, vcd, svcd, cvd or divx TITLE and CHAPTER are the numbers used to identify the TITLE and CHAPTER number for this file THREADS is the number of threads to use SECONDS is the number of seconds we want to convert (for previews) ENCPASS is the number of encoding pass""" devede_executor.executor.__init__(self, filename, filefolder, progresbar) self.printout = False self.percent2 = 120 self.film_length = float(videofile["olength"]) if seconds == 0: self.divide = float(videofile["olength"]) if (videofile["cutting"] == 1) or (videofile["cutting"] == 2): # if we want only one half of the file self.divide /= 2 else: self.divide = float(seconds) if self.divide == 0: self.divide = 1 self.error = "" progresbar.set_fraction(0) progresbar.set_text("") if videofile[ "ismpeg"]: # if the file hasn't to be converted, we simply copy or link it self.pulse = True self.print_error = _( "File copy failed\nMaybe you ran out of disk space?") if seconds == 0: texto = _("Copying the file") + "\n" else: texto = _("Creating preview") + "\n" proglabel.set_text(texto + videofile["filename"]) currentfile = self.create_filename(filefolder + filename, title, chapter, disctype == "divx") print "\ncurrentfile is: ", currentfile, "\n" try: os.remove(currentfile) except: pass if (sys.platform == "win32") or (sys.platform == "win64"): # links do not work on windows, so just copy the file # self.launch_shell('copy "'+videofile["path"].replace('"','""')+'" "'+currentfile+'"',output=False) # Only hardlinks are available on 2000 and XP, reparse points are available from vista onwards. win32file.CreateHardLink(currentfile, videofile["path"].replace('"', '""')) else: if len(videofile["sub_list"]) == 0: self.launch_shell('ln -s "' + videofile["path"].replace('"', '\\"') + '" "' + currentfile + '"', output=False) else: self.launch_shell('cp "' + videofile["path"].replace('"', '\\"') + '" "' + currentfile + '"', output=False) return isvob = videofile["isvob"] self.pulse = False if seconds == 0: texto = (_( "Converting files from title %(title_number)s (pass %(pass_number)s)\n\n%(file_name)s" ) % { "title_number": str(title), "pass_number": str(encpass), "file_name": videofile["filename"] }) proglabel.set_text( texto ) #+" "+str(title)+" Pass: "******"\n\n"+videofile["filename"] ) else: texto = _("Creating preview") proglabel.set_text(texto + "\n" + videofile["filename"]) addbars = False framerate = int(videofile["ofps"]) videorate = int(videofile["vrate"]) audiorate = self.adjust_audiorate(int(videofile["arate"]), disctype == "dvd") audio_final_rate = int(videofile["arateunc"]) audiodelay = float(videofile["adelay"]) final_framerate = float(videofile["fps"]) aspect_ratio_original = videofile["oaspect"] aspect_ratio_final = videofile["aspect"] resx_final = videofile["width"] resy_final = videofile["height"] resx_original = videofile["owidth"] resy_original = videofile["oheight"] copy_audio = videofile["copy_audio"] sound51 = videofile["sound51"] gop12 = videofile["gop12"] audiostream = videofile["audio_stream"] swap_fields = videofile["swap_fields"] volume = videofile["volume"] audio_tracks = len(videofile["audio_list"]) if (videofile["resolution"] == 0) and (disctype == "divx"): default_res = True else: default_res = False speed1, speed2 = devede_other.get_speedup(videofile) if speed1 == speed2: speedup = None else: speedup = str(speed1) + ":" + str(speed2) if aspect_ratio_original < 1.3: aspect_ratio_original = float(videofile["owidth"]) / (float( videofile["oheight"])) if aspect_ratio_original < 1.33333333: aspect_ratio_original = 1.33333333 max_videorate = int(videorate * 2) min_videorate = int(videorate * 0.75) dsize, minvid, maxvid = devede_other.get_dvd_size(None, disctype) if max_videorate > maxvid: max_videorate = maxvid if min_videorate < minvid: min_videorate = minvid if videofile["blackbars"] == 0: # check if has to add black bars addbars = True if (videofile["rotate"] == 90) or (videofile["rotate"] == 270): resx_original2 = resy_original resy_original2 = resx_original aratio = 1 / aspect_ratio_original else: resx_original2 = resx_original resy_original2 = resy_original aratio = aspect_ratio_original if (resx_original2 % 2) == 1: resx_original2 += 1 if (resy_original2 % 2) == 1: resy_original2 += 1 resy_tmp = int(resy_final * aspect_ratio_final / aratio) resx_tmp = int(resx_final * aratio / aspect_ratio_final) if (resx_tmp > resx_final): resx_inter = resx_final resy_inter = resy_tmp else: resx_inter = resx_tmp resy_inter = resy_final #resx_inter=resx_original2 #resy_inter=int((resy_original2*aspect_ratio_original)/aspect_ratio_final) if (resx_inter % 2) == 1: resx_inter -= 1 if (resy_inter % 2) == 1: resy_inter -= 1 #if ((resy_inter<resy_original) or (resy_original+5>resy_inter)): # addbars=False if addbars == False: resx_inter = resx_final resy_inter = resy_final else: if (resx_inter == resx_final): addx = 0 addy = int((resy_final - resy_inter) / 2) if (addy % 2) == 1: addy += 1 else: addy = 0 addx = int((resx_final - resx_inter) / 2) if (addx % 2) == 1: addx += 1 command_var = ["ffmpeg"] #command_var=["avconv"] command_var.append("-i") command_var.append(videofile["path"]) if (volume != 100): command_var.append("-vol") command_var.append(str((256 * volume) / 100)) if (audiodelay != 0.0) and (copy_audio == False) and (isvob == False): command_var.append("-itsoffset") command_var.append(str(audiodelay)) command_var.append("-i") command_var.append(videofile["path"]) command_var.append("-map") command_var.append("1:0") for l in range(audio_tracks): command_var.append("-map") command_var.append("0" + ":" + str(l + 1)) if (isvob == False): cmd_line = "" extra_params = videofile["params_vf"] # take the VF extra params while (extra_params != ""): extra_params, new_param = devede_other.get_new_param( extra_params) if (new_param != "") and (new_param != ','): while (len(new_param) > 1) and (new_param[0] == ','): new_param = new_param[1:] while (len(new_param) > 1) and (new_param[-1] == ','): new_param = new_param[:-1] if new_param == "fifo": continue if cmd_line != "": cmd_line += ",fifo," cmd_line += new_param if videofile["deinterlace"] == "yadif": if (cmd_line != ""): cmd_line += ",fifo," cmd_line += "yadif" vflip = 0 hflip = 0 if (videofile["rotate"] == 90): if (cmd_line != ""): cmd_line += ",fifo," cmd_line += "transpose=1" elif (videofile["rotate"] == 270): if (cmd_line != ""): cmd_line += ",fifo," cmd_line += "transpose=2" elif (videofile["rotate"] == 180): vflip = 1 hflip = 1 if (videofile["vmirror"]): vflip = 1 - vflip if (videofile["hmirror"]): hflip = 1 - hflip if (vflip == 1): if (cmd_line != ""): cmd_line += ",fifo," cmd_line += "vflip" if (hflip == 1): if (cmd_line != ""): cmd_line += ",fifo," cmd_line += "hflip" if addbars and ((resx_inter != resx_original) or (resy_inter != resy_original)) and (default_res == False): if (cmd_line != ""): cmd_line += ",fifo," cmd_line += "scale=" + str(resx_inter) + ":" + str( resy_inter) + ",fifo,pad=" + str(resx_final) + ":" + str( resy_final) + ":" + str(addx) + ":" + str( addy) + ":0x000000" if cmd_line != "": command_var.append("-vf") command_var.append(cmd_line) command_var.append("-y") vcd = False if (disctype != "divx"): command_var.append("-target") if (disctype == "dvd"): if final_framerate == 30: command_var.append("ntsc-dvd") elif (framerate == 24): command_var.append("film-dvd") else: command_var.append("pal-dvd") if (copy_audio == False): command_var.append("-acodec") if fix_ac3: command_var.append("ac3_fixed") else: command_var.append("ac3") #command_var.append("-maxrate") #command_var.append("7000k") #command_var.append("-minrate") #command_var.append("2200k") elif (disctype == "vcd"): vcd = True if final_framerate == 30: command_var.append("ntsc-vcd") else: command_var.append("pal-vcd") elif (disctype == "svcd"): if final_framerate == 30: command_var.append("ntsc-svcd") else: command_var.append("pal-svcd") elif (disctype == "cvd"): if final_framerate == 30: command_var.append("ntsc-svcd") else: command_var.append("pal-svcd") else: # DivX command_var.append("-vcodec") command_var.append("mpeg4") command_var.append("-acodec") command_var.append("libmp3lame") command_var.append("-f") command_var.append("avi") if (not isvob): command_var.append("-sn") # no subtitles if copy_audio or isvob: command_var.append("-acodec") command_var.append("copy") #else: # if (disctype=="divx"): # command_var.append("-acodec") # command_var.append("mp3") #if (audiostream!=10000): # command_var.append("-aid") # command_var.append(str(audiostream)) if isvob: command_var.append("-vcodec") command_var.append("copy") if (vcd == False): if final_framerate == 30: if (framerate == 24) and ((disctype == "dvd") or (disctype == "divx")): str_final_framerate = "24000/1001" keyintv = 15 telecine = True else: str_final_framerate = "30000/1001" keyintv = 18 else: str_final_framerate = str(int(final_framerate)) keyintv = 15 if (disctype == "divx"): command_var.append("-g") command_var.append("300") elif gop12 and (isvob == False): command_var.append("-g") command_var.append("12") command_var.append("-bf") command_var.append("2") command_var.append("-strict") command_var.append("1") if seconds != 0: command_var.append("-t") command_var.append(str(seconds)) else: if videofile["cutting"] == 1: # first half only command_var.append("-t") command_var.append(str(videofile["olength"] / 2)) elif videofile["cutting"] == 2: # second half only command_var.append("-ss") command_var.append(str((videofile["olength"] / 2) - 5)) # start 5 seconds before #if (audiodelay!=0.0) and (copy_audio==False) and (isvob==False): # command_var.append("-delay") # command_var.append(str(audiodelay)) command_var.append("-ac") if (sound51) and ((disctype == "dvd") or (disctype == "divx")): command_var.append("6") else: command_var.append("2") #if (isvob==False) and (default_res==False): # command_var.append("-ofps") # command_var.append(str_final_framerate) if disctype == "divx": command_var.append("-vtag") command_var.append("DX50") lineatemp = "" acoma = False #if swap_fields: # lineatemp+="phase=a" # acoma=True passlog_var = None if (videofile["deinterlace"] != "none") and ( videofile["deinterlace"] != "yadif") and (isvob == False): command_var.append("-deinterlace") print "Addbars " + str(addbars) + " resx_o " + str( resx_original) + " resy_o " + str(resy_original) print "resx_i " + str(resx_inter) + " resy_i " + str(resy_inter) if (isvob == False) and (vcd == False): command_var.append("-s") command_var.append(str(resx_final) + "x" + str(resy_final)) # Currently Mencoder supports up to 8 threads if isvob == False: threads if threads > 1: command_var.append("-threads") command_var.append(str(threads)) command_var.append("-trellis") if videofile["trellis"]: command_var.append("1") else: command_var.append("0") if videofile["mbd"] == 0: command_var.append("-mbd") command_var.append("0") elif videofile["mbd"] == 1: command_var.append("-mbd") command_var.append("1") elif videofile["mbd"] == 2: command_var.append("-mbd") command_var.append("2") if (vcd == False): command_var.append("-b") command_var.append(str(videorate) + "000") #if disctype!="divx": # lavcopts+=":keyint="+str(keyintv) if (copy_audio == False) and (vcd == False): # lavcopts+=":acodec=" # if disctype=="dvd": # if fix_ac3: # lavcopts+="ac3_fixed" # else: # lavcopts+="ac3" # else: # lavcopts+="mp2" #lavcopts+=":abitrate="+str(audiorate) command_var.append("-ab") command_var.append(str(audiorate) + "000") if (default_res == False): command_var.append("-aspect") if aspect_ratio_final > 1.4: command_var.append("16:9") else: command_var.append("4:3") passlog_var = None if (encpass > 0) and (isvob == False): command_var.append("-pass") command_var.append(str(encpass)) passlog_var = os.path.join(filefolder, filename) + ".log" if encpass == 1: try: os.remove(passlog_var) except: pass at = audio_tracks while (at > 1): if (volume != 100): command_var.append("-vol") command_var.append(str((256 * volume) / 100)) command_var.append("-newaudio") at -= 1 extra_params = videofile["params"] # take the extra params while (extra_params != ""): extra_params, new_param = devede_other.get_new_param(extra_params) if new_param != "": command_var.append(new_param) currentfile = self.create_filename(filefolder + filename, title, chapter, disctype == "divx") if (passlog_var != None) and (isvob == False): command_var.append("-passlogfile") command_var.append(passlog_var) if (encpass == 1) and (isvob == False): command_var.append("-y") command_var.append("/dev/null") else: command_var.append(currentfile) self.print_error = _("Conversion failed.\nIt seems a bug of Mencoder.") if (videofile["params"] != "") or (videofile["params_vf"] != "") or ( videofile["params_lame"] != ""): self.print_error += "\n" + _( "Also check the extra params passed to Mencoder for syntax errors." ) self.error_not_done = True self.launch_program(command_var, read_chars=300)
def create_hard_link(src, dest): if hasattr(os, "link"): os.link(src, dest) else: import win32file win32file.CreateHardLink(dest, src)
# Copyright (c) 2017 Vertex.AI # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. __version__ = '0.5.1' import platform if platform.system() == 'Windows': import os import os.path import win32file os.link = lambda (src, dest): win32file.CreateHardLink( os.path.abspath(dest), os.path.abspath(src)) os.symlink = lambda (src, dest): win32file.CreateSymbolicLink( os.path.abspath(dest), os.path.abspath(src), 0x2)
def main(source, destination, job_name, version): extensions = set(('.pdb', '.dll', '.exe', '.ocx')) files_copied = 0 starttime = datetime.datetime.now() log("Start " + starttime.isoformat()) destdir = tempfile.mkdtemp() log("destination %s" % destdir) for root, dirs, files in os.walk(source): #print dirs for filename in (f for f in files if f[-4:] in extensions): pdb_dir = os.path.join(destdir, os.path.relpath(root, source)) try: os.makedirs(pdb_dir) except WindowsError as err: if err.winerror != 183: raise # print os.path.join(pdb_dir, filename) win32file.CreateHardLink(os.path.join(pdb_dir, filename), os.path.join(root, filename)) files_copied += 1 #except pywintypes.error as err: # if err.winerror != 183: #pywintypes.error (183, 'CreateHardLink', 'Cannot create a file when that file already exists.') for exclude in ('.git', '.svn', 'CVS', '.hg', '3rdParty', 'Python27', 'Python26'): if exclude in dirs: dirs.remove(exclude) log("%d files copied" % files_copied) startup = win32process.STARTUPINFO() startup.dwFlags += win32process.STARTF_USESTDHANDLES startup.hStdInput = win32file.INVALID_HANDLE_VALUE security_attributes = pywintypes.SECURITY_ATTRIBUTES() security_attributes.bInheritHandle = 1 log_path = os.path.join(destdir, "log") startup.hStdOutput = startup.hStdError = win32file.CreateFile( log_path, win32file.GENERIC_WRITE, win32file.FILE_SHARE_READ, security_attributes, win32file.CREATE_ALWAYS, 0, None) win32file.WriteFile(startup.hStdOutput, 'log started\n') dtw_locations = ( os.path.join(os.environ.get('ProgramFiles', r'C:\Program Files (x86)'), 'Debugging Tools for Windows (x86)'), os.path.join(os.environ.get('ProgramFiles', r'C:\Program Files'), 'Debugging Tools for Windows (x64)'), os.path.join( os.environ.get('ProgramFiles(x86)', r'C:\Program Files (x86)'), 'Debugging Tools for Windows (x86)'), os.path.join(os.environ.get('ProgramW6432', r'C:\Program Files'), 'Debugging Tools for Windows (x64)'), ) for dtw_location in dtw_locations: symstore = os.path.join(dtw_location, 'symstore.exe') if os.path.isfile(symstore): break else: raise Exception("Couldn't find symstore.exe in " + ' '.join(dtw_locations) + ". Is Debugging Tools for Windows installed?") (hProcess, hThread, processId, threadId) = win32process.CreateProcess( symstore, "symstore.exe add /r /f \"%s\" /s \"%s\" /t \"%s\" /v \"%s\"" % (destdir, destination, job_name, version), None, None, True, win32process.CREATE_BREAKAWAY_FROM_JOB, None, None, startup) win32api.CloseHandle(hThread) # Don't need to wait here, but it doesn't take long, and we can remove the temp dir import win32event win32event.WaitForSingleObject(hProcess, win32event.INFINITE) exit_code = win32process.GetExitCodeProcess(hProcess) log("symstore exited with code " + str(exit_code)) win32api.CloseHandle(startup.hStdOutput) with file(log_path, "r") as log_file: for line in log_file: log("symstore: " + line.rstrip('\r\n')) import shutil shutil.rmtree(destdir) win32api.CloseHandle(hProcess) # print "\n".join(open(os.path.join(destdir, 'log'), 'r')) log("finish: %s" % datetime.datetime.now().isoformat()) log("elapsed time: %d seconds" % (datetime.datetime.now() - starttime).seconds) return exit_code
def __init__(self,global_vars,videofile,filename,filefolder,progresbar,proglabel,disctype,title,chapter,threads,seconds,encpass): """ This class converts a video file to MPEG-1 or MPEG-2 format VIDEOFILE contains the parameters to convert the video FILENAME is the generic file name given by the user FILEFOLDER is the path where all the temporary and finall files will be created PROGRESBAR is the progress bar where the class will show the progress PROGLABEL is the label where the class will show what is it doing DISCTYPE can be dvd, vcd, svcd, cvd or divx TITLE and CHAPTER are the numbers used to identify the TITLE and CHAPTER number for this file THREADS is the number of threads to use SECONDS is the number of seconds we want to convert (for previews) ENCPASS is the number of encoding pass""" devede_executor.executor.__init__(self,filename,filefolder,progresbar) self.printout=False self.percent2=120 if seconds==0: self.divide=float(videofile["olength"]) if (videofile["cutting"]==1) or (videofile["cutting"]==2): # if we want only one half of the file self.divide/=2 else: self.divide=float(seconds) if self.divide==0: self.divide=1 self.error="" progresbar.set_fraction(0) progresbar.set_text("") if videofile["ismpeg"]: # if the file hasn't to be converted, we simply copy or link it self.pulse=True self.print_error=_("File copy failed\nMaybe you ran out of disk space?") if seconds==0: texto=_("Copying the file")+"\n" else: texto=_("Creating preview")+"\n" proglabel.set_text(texto+videofile["filename"]) currentfile=self.create_filename(filefolder+filename,title,chapter,disctype=="divx") print "\ncurrentfile is: ", currentfile , "\n" try: os.remove(currentfile) except: pass if (sys.platform=="win32") or (sys.platform=="win64"): # links do not work on windows, so just copy the file # self.launch_shell('copy "'+videofile["path"].replace('"','""')+'" "'+currentfile+'"',output=False) # Only hardlinks are available on 2000 and XP, reparse points are available from vista onwards. win32file.CreateHardLink(currentfile, videofile["path"].replace('"','""')) else: if len(videofile["sub_list"])==0: self.launch_shell('ln -s "'+videofile["path"].replace('"','\\"')+'" "'+currentfile+'"',output=False) else: self.launch_shell('cp "'+videofile["path"].replace('"','\\"')+'" "'+currentfile+'"',output=False) return isvob=videofile["isvob"] self.pulse=False if seconds==0: texto=(_("Converting files from title %(title_number)s (pass %(pass_number)s)\n\n%(file_name)s") % {"title_number":str(title),"pass_number":str(encpass),"file_name":videofile["filename"]} ) proglabel.set_text(texto) #+" "+str(title)+" Pass: "******"\n\n"+videofile["filename"] ) else: texto=_("Creating preview") proglabel.set_text(texto+"\n"+videofile["filename"]) addbars=False framerate=int(videofile["ofps"]) videorate=int(videofile["vrate"]) audiorate=self.adjust_audiorate(int(videofile["arate"]),disctype=="dvd") audio_final_rate=int(videofile["arateunc"]) audiodelay=float(videofile["adelay"]) final_framerate=float(videofile["fps"]) aspect_ratio_original=videofile["oaspect"] aspect_ratio_final=videofile["aspect"] resx_final=videofile["width"] resy_final=videofile["height"] resx_original=videofile["owidth"] resy_original=videofile["oheight"] copy_audio=videofile["copy_audio"] sound51=videofile["sound51"] gop12=videofile["gop12"] audiostream=videofile["audio_stream"] swap_fields=videofile["swap_fields"] volume=videofile["volume"] if (videofile["resolution"]==0) and (disctype=="divx"): default_res=True else: default_res=False speed1,speed2=devede_other.get_speedup(videofile) if speed1==speed2: speedup=None else: speedup=str(speed1)+":"+str(speed2) if aspect_ratio_original<1.3: aspect_ratio_original=float(videofile["owidth"])/(float(videofile["oheight"])) if aspect_ratio_original<1.33333333: aspect_ratio_original=1.33333333 max_videorate=int(videorate*2) min_videorate=int(videorate*0.75) dsize,minvid,maxvid=devede_other.get_dvd_size(None,disctype) if max_videorate>maxvid: max_videorate=maxvid if min_videorate<minvid: min_videorate=minvid if videofile["blackbars"]==0: # check if has to add black bars addbars=True if (videofile["rotate"]==90) or (videofile["rotate"]==270): resx_original2=resy_original resy_original2=resx_original else: resx_original2=resx_original resy_original2=resy_original if (resx_original2%2)==1: resx_original2+=1 if (resy_original2%2)==1: resy_original2+=1 resx_inter=resx_original2 resy_inter=int((resy_original2*aspect_ratio_original)/aspect_ratio_final) if (resy_inter%2)==1: resy_inter+=1 # due to a bug in MENCODER, we put bars only up and down, never left and right, # and we don't scale it if we have to add only 4 or less lines, because it is # too much work for so little profit if ((resy_inter<resy_original) or (resy_original+5>resy_inter)): addbars=False if addbars==False: resx_inter=resx_original resy_inter=resy_original else: addx=0 addy=int((resy_inter-resy_original)/2) if(addy%2)==1: addy+=1 command_var=[] if (sys.platform!="win32") and (sys.platform!="win64"): command_var=["mencoder"] else: command_var=["mencoder.exe"] if (disctype=="dvd") or (disctype=="divx"): audio_desired_final_rate=48000 else: audio_desired_final_rate=44100 afvalues="" if isvob==False: if ((audio_final_rate!=audio_desired_final_rate) and (copy_audio==False)) or (speedup!=None): command_var.append("-srate") command_var.append(str(audio_desired_final_rate)) afvalues+="lavcresample="+str(audio_desired_final_rate) if (copy_audio==False) and volume!=100: if afvalues!="": afvalues+=":" afvalues+="volume="+str(10*math.log(volume/10,10)) # Add the speedup code if speedup!=None: command_var.append("-speed") command_var.append(speedup) if afvalues!="": command_var.append("-af") command_var.append(afvalues) command_var.append("-noautosub") command_var.append("-oac") if copy_audio or isvob: command_var.append("copy") else: if (disctype=="divx"): command_var.append("mp3lame") else: command_var.append("lavc") if (audiostream!=10000): command_var.append("-aid") command_var.append(str(audiostream)) telecine=False if final_framerate==30: if (framerate==24) and ((disctype=="dvd") or (disctype=="divx")): str_final_framerate="24000/1001" keyintv=15 telecine=True else: str_final_framerate="30000/1001" keyintv=18 else: str_final_framerate=str(int(final_framerate)) keyintv=15 if gop12: keyintv=12 command_var.append("-ovc") if isvob: command_var.append("copy") else: command_var.append("lavc") if (disctype!="divx"): command_var.append("-of") command_var.append("mpeg") command_var.append("-mpegopts") if disctype=="dvd": if telecine and isvob==False: command_var.append("format=dvd:tsaf:telecine") else: command_var.append("format=dvd:tsaf") elif disctype=="vcd": command_var.append("format=xvcd") elif (disctype=="svcd") or (disctype=="cvd"): command_var.append("format=xsvcd") else: print "Error, disc format incorrect. Talk with the creator." sys.exit(1) if seconds!=0: command_var.append("-endpos") command_var.append(str(seconds)) else: if videofile["cutting"]==1: # first half only command_var.append("-endpos") command_var.append(str(videofile["olength"]/2)) elif videofile["cutting"]==2: # second half only command_var.append("-ss") command_var.append(str((videofile["olength"]/2)-5)) # start 5 seconds before if (audiodelay!=0.0) and (copy_audio==False) and (isvob==False): command_var.append("-delay") command_var.append(str(audiodelay)) if sound51: command_var.append("-channels") command_var.append("6") if (isvob==False) and (default_res==False): command_var.append("-ofps") command_var.append(str_final_framerate) if disctype=="divx": command_var.append("-ffourcc") command_var.append("DX50") lineatemp="" acoma=False; if swap_fields: lineatemp+="phase=a" acoma=True extra_params=videofile["params_vf"] # take the VF extra params while (extra_params!=""): extra_params,new_param=devede_other.get_new_param(extra_params) if (new_param!="") and (new_param!=','): while (len(new_param)>1) and (new_param[0]==','): new_param=new_param[1:] while (len(new_param)>1) and (new_param[-1]==','): new_param=new_param[:-1] if acoma: lineatemp+="," lineatemp+=new_param acoma=True vmirror=0 hmirror=0 passlog_var = None if videofile["deinterlace"]!="none": if acoma: lineatemp+="," if videofile["deinterlace"]!="yadif": lineatemp+="pp="+videofile["deinterlace"] else: lineatemp+="yadif=0" acoma=True if videofile["rotate"]==180: vmirror=1-vmirror hmirror=1-hmirror if videofile["vmirror"]: vmirror=1-vmirror if videofile["hmirror"]: hmirror=1-hmirror if vmirror==1: if acoma: lineatemp+="," lineatemp+="flip" acoma=True if hmirror==1: if acoma: lineatemp+="," lineatemp+="mirror" acoma=True print "Addbars "+str(addbars)+" resx_o "+str(resx_original)+" resy_o "+str(resy_original) print "resx_i "+str(resx_inter)+" resy_i "+str(resy_inter) if addbars and ((resx_inter!=resx_original) or (resy_inter!=resy_original)) and (default_res==False): if acoma: lineatemp+="," lineatemp+="expand="+str(resx_inter)+":"+str(resy_inter)+":"+str(addx)+":"+str(addy) acoma=True if videofile["rotate"]==90: if acoma: lineatemp+="," lineatemp+="rotate=1" acoma=True if videofile["rotate"]==270: if acoma: lineatemp+="," lineatemp+="rotate=2" acoma=True if ((resx_inter!=resx_final) or (resy_inter!=resy_final)) and (default_res==False): if acoma: lineatemp+="," lineatemp+="scale="+str(resx_final)+":"+str(resy_final) acoma=True if disctype!="divx": if acoma: lineatemp+="," lineatemp+="harddup" acoma=True if (lineatemp!="") and (isvob==False): command_var.append("-vf") command_var.append(lineatemp) if isvob==False: command_var.append("-lavcopts") lavcopts="" # Currently Mencoder supports up to 8 threads if threads>8: nthreads=8 else: nthreads=threads if nthreads>1: lavcopts="threads="+str(nthreads)+":" lavcopts+="vcodec=" if disctype=="vcd": lavcopts+="mpeg1video" elif disctype=="divx": lavcopts+="mpeg4" else: lavcopts+="mpeg2video" if videofile["trellis"]: lavcopts+=":trell" if videofile["mbd"]==0: lavcopts+=":mbd=0" elif videofile["mbd"]==1: lavcopts+=":mbd=1" elif videofile["mbd"]==2: lavcopts+=":mbd=2" lavcopts+=":sc_threshold=1000000000:cgop" if disctype!="divx": lavcopts+=":vstrict=0:vrc_maxrate="+str(max_videorate) lavcopts+=":vrc_buf_size=" if (disctype=="vcd"): lavcopts+="327" elif (disctype=="svcd") or (disctype=="cvd"): lavcopts+="917" elif (disctype=="dvd"): lavcopts+="1835" if disctype=="vcd": lavcopts+=":vrc_minrate="+str(min_videorate) lavcopts+=":vbitrate="+str(videorate) if disctype!="divx": lavcopts+=":keyint="+str(keyintv) if(copy_audio==False): lavcopts+=":acodec=" if disctype=="dvd": lavcopts+="ac3" else: lavcopts+="mp2" lavcopts+=":abitrate="+str(audiorate) if (default_res==False): if aspect_ratio_final>1.4: lavcopts+=":aspect=16/9" else: lavcopts+=":aspect=4/3" if encpass > 0: lavcopts+=":vpass="******".log" if encpass==1: try: os.remove(passlog_var) except: pass if videofile["turbo1stpass"]: lavcopts+=":turbo" extra_params=videofile["params_lavc"] # take the LAVC extra params while (extra_params!=""): extra_params,new_param=devede_other.get_new_param(extra_params) if (new_param!="") and (new_param!=':'): while (len(new_param)>1) and (new_param[0]==':'): new_param=new_param[1:] while (len(new_param)>1) and (new_param[-1]==':'): new_param=new_param[:-1] lavcopts+=":"+new_param command_var.append(lavcopts) if (disctype=="divx") and (copy_audio==False) and (isvob==False): lameopts="abr:br="+str(audiorate) command_var.append("-lameopts") extra_params=videofile["params_lame"] # take the LAME extra params while (extra_params!=""): extra_params,new_param=devede_other.get_new_param(extra_params) if (new_param!="") and (new_param!=':'): while (len(new_param)>1) and (new_param[0]==':'): new_param=new_param[1:] while (len(new_param)>1) and (new_param[-1]==':'): new_param=new_param[:-1] lameopts+=":"+new_param command_var.append(lameopts) currentfile=self.create_filename(filefolder+filename,title,chapter,disctype=="divx") if (passlog_var != None): command_var.append("-passlogfile") command_var.append(passlog_var) command_var.append("-o") command_var.append(currentfile) command_var.append(videofile["path"]) extra_params=videofile["params"] # take the extra params while (extra_params!=""): extra_params,new_param=devede_other.get_new_param(extra_params) if new_param!="": command_var.append(new_param) self.print_error=_("Conversion failed.\nIt seems a bug of Mencoder.") if (videofile["params"]!="") or (videofile["params_vf"]!="") or (videofile["params_lavc"]!="") or (videofile["params_lame"]!=""): self.print_error+="\n"+_("Also check the extra params passed to Mencoder for syntax errors.") self.error_not_done=True self.launch_program(command_var,read_chars=300)
def make_hardlink(dest_path, link_path): win32file.CreateHardLink(dest_path, link_path)