[ python ] Auto versioning save tool

簡単なスクリプトを書きました。
自動でバージョンつけてセーブするツール。



import maya.cmds as mc
import os, os.path

def openUI():
  window = 'autoVersioningSave'
  title = 'Auto Versioning Save'
  if(mc.window(window, q=True, ex=True)):
    mc.deleteUI(window)
  mc.window(window, t=title)
  form = mc.formLayout()
  tfg1 = mc.textFieldGrp('tfg_buDir', l='Backup Dir Name', cat=(1, 'right', 3),
    cw2=[100, 200], tx='_backup')
  sep1 = mc.separator(h=4)
  btn1 = mc.button(l='Save', h=30, c=saveAddapt)
  mc.setParent('..')

  mc.formLayout( form, e=True,
    attachForm=( [tfg1, 'top', 5],
           [tfg1, 'left', 5],
           [tfg1, 'right', 5],
           [sep1, 'left', 5],
           [sep1, 'right', 5],
           [btn1, 'left', 5],
           [btn1, 'right', 5],
           [btn1, 'bottom', 5 ] ),
    attachControl=( [sep1, 'bottom', 5, btn1] ) )
  mc.showWindow()

def saveAddapt(*args):
  backupDir = mc.textFieldGrp('tfg_buDir', q=True, tx=True)
  if backupDir == '':
    raise( 'No directory name' )
  save(backupDir)

def save(backupDir):
  # get current sceneName
  currentFile = mc.file(q=True, sceneName=True)
  if currentFile == '':
    print('### This scene is not saved..')
    return
  currentFilePath = os.path.dirname(currentFile)
  currentFileName = os.path.basename(currentFile)
  [baseName, ext] = os.path.splitext(currentFileName)
  # search same name items
  saveDirPath = '%s/%s'%(currentFilePath, backupDir)
  if not os.path.exists(saveDirPath):
    print( '# Create Directory : %s'%saveDirPath )
    os.makedirs(saveDirPath)
  items = os.listdir(saveDirPath)
  numOldFile = len([item for item in items if baseName in item])+1
  versionNumberStr = '%03d'%numOldFile
  savePath = '%s/%s'%(saveDirPath, baseName)
  nextVersionName = '%s.v%s%s'%(savePath, versionNumberStr, ext)
  if os.path.exists(nextVersionName):
    raise('### %s is existing.'%nextVersionName)
  # save
  mc.file(rename=nextVersionName)
  mc.file(f=True, save=True)
  nextVersionName = mc.file(q=True, sceneName=True)
  mc.file(rename=currentFile)
  print('### Succeed :'+ nextVersionName)

ちょい前に作って放置してたので、ちょっと手加えてみた。
まだまだPythonのことが分かってないぞ、おれ頑張れ。
そこのPythonista様、よりPythonないかした書き方、レクチャーしてください。

はて、一応ツールの簡単な説明を。
パス通った場所において、importして、openUI()してやればウィンドウが開きます。
これは、なんとなくつくったしょーもないウィンドウです。
で、テキストフィールドに打ち込んだ名前のディレクトリを、現在のシーンデータと同階層に作って、
その下にバージョンつけて保存していきます。
ちょいいじればexecfileで実行することも可能です。

しょーもないツールですが、ちょっと今度使ってみようかと思ってます。
使ったら意外と便利だったりして?

早く家にネットつながないとソースのUPすらも不便 :(

コメントを残す

メールアドレスが公開されることはありません。