亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? svn-fast-backup

?? subversion-1.4.3-1.tar.gz 配置svn的源碼
??
字號(hào):
#!/usr/bin/env python2.4# $Id: svn-fast-backup 8698 2005-09-02 07:28:22Z quarl $# svn-fast-backup: use rsync snapshots for very fast FSFS repository backup.#    Multiple FSFS backups share data via hardlinks, meaning old backups are#    almost free, since a newer revision of a repository is almost a complete#    superset of an older revision.# This is good for replacing incremental log-dump+restore-style backups# because it is just as space-conserving and even faster; there is no# inter-backup state (old backups are essentially caches); each backup# directory is self-contained.  It keeps the same interface as svn-hot-backup# (if you use --force), but only works for FSFS repositories.# Author: Karl Chen <quarl@quarl.org>## quarl 2005-08-17 initial version## quarl 2005-09-01 refactor, documentation; new options: --force, --keep,##                  --simulate, --trace# Originally based on svn-hot-backup.py, whose copyright notice states:# ====================================================================# Copyright (c) 2000-2004 CollabNet.  All rights reserved.## This software is licensed as described in the file COPYING, which# you should have received as part of this distribution.  The terms# are also available at http://subversion.tigris.org/license-1.html.# If newer versions of this license are posted there, you may use a# newer version instead, at your option.## This software consists of voluntary contributions made by many# individuals.  For exact contribution history, see the revision# history and logs, available at http://subversion.tigris.org/.# ====================================================================######################################################################import sys, os, reimport getoptimport subprocess                                   # python2.4####################################################################### Global Settingssvnlook = "svnlook"                                 # Path to svnlooksvnadmin = "svnadmin"                               # Path to svnadminrsync = "rsync"                                     # Path to rsync####################################################################### Command line argumentsdef usage():    raise SystemExit("""Syntax: %s [OPTIONS] repos_path backup_dirMakes a hot backup of a Subversion FSFS repository at REPOS_PATH toBACKUP_DIR/repos-rev.If a previous version exists, make hard links of its files using rsync.As multiple FSFS backups share data via hardlinks, old backups usealmost no space, since a newer revision of a repository is almost a completesuperset of an older revision (excluding direct repository modifications).Keeps up to N backups and deletes the rest.  (N includes the current backup.)OPTIONS:   -h, --help        This screen   -q, --quiet       Quieter than usual   -k, --keep=N      Keep N backups instead of 64   -k, --keep=all    Keep all backups (never delete any)   -f, --force       Make a new backup even if one with current revision exists   -t, --trace       Show actions   -s, --simulate    Don't perform actions""" %sys.argv[0])class Options: passdef default_options():    options = Options()    options.force = False    options.trace = False    options.simulate = False    options.quiet = False    options.keep = 64                       # Number of backups to keep around    return optionsdef parse_commandline():    options = default_options()    try:        opts, args = getopt.getopt(sys.argv[1:], 'qhk:fts', ['quiet', 'help', 'keep=', 'force',                                                             'trace', 'simulate'])    except getopt.GetoptError, e:        print >>sys.stderr, "Error:", e        usage()    for (o,a) in opts:        if o == '-h' or o == '--help':            usage()        elif o == '-q' or o == '--quiet':            options.quiet = True        elif o == '-f' or o == '--force':            options.force = True        elif o == '-t' or o == '--trace':            options.trace = True        elif o == '-s' or o == '--simulate':            options.simulate = True        elif o == '-k' or o == '--keep':            if a.strip().lower() == 'all':                options.keep = 0            else:                options.keep = int(a)        else:            raise Exception("Internal error")    if len(args) != 2:        usage()    # Path to repository    options.repo_dir = args[0]    # Where to store the repository backup.  The backup will be placed in a    # *subdirectory* of this location, named after the youngest revision.    options.backup_dir = os.path.abspath(args[1])    options.repo = os.path.basename(os.path.abspath(options.repo_dir))    return optionsdef comparator(a, b):    # We pass in filenames so there is never a case where they are equal.    regexp = re.compile("-(?P<revision>[0-9]+)(-(?P<increment>[0-9]+))?$")    matcha = regexp.search(a)    matchb = regexp.search(b)    reva = int(matcha.groupdict()['revision'])    revb = int(matchb.groupdict()['revision'])    if (reva < revb):        return -1    elif (reva > revb):        return 1    else:        inca = matcha.groupdict()['increment']        incb = matchb.groupdict()['increment']    if not inca:        return -1    elif not incb:        return 1;    elif (int(inca) < int(incb)):        return -1    else:        return 1def pipe(command):    return subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0].strip()def readfile(filename):    try:        return open(filename).read().strip()    except:        return ''def runcmd(cmd):    if options.trace:        print >>sys.stderr, '#', cmd    if options.simulate:        return 0    return subprocess.call(cmd)def deltree(path):    runcmd(['rm', '-r', path])def get_youngest_revision():    if readfile(os.path.join('db', 'fs-type')) != 'fsfs':        raise SystemExit("Path '%s' doesn't contain a FSFS repository"%options.repo_dir)    return pipe(["svnlook","youngest","."])def list_repo_backups():    '''Return a sorted list of backups for this repository.'''    regexp = re.compile(options.repo + "-[0-9]+(-[0-9]+)?$")    directory_list = [x for x in os.listdir(options.backup_dir) if regexp.match(x)]    directory_list.sort(comparator)    return directory_listdef delete_old_backups():    if options.keep <= 0:        return    for item in list_repo_backups()[:-options.keep]:        old_backup_subdir = os.path.join(options.backup_dir, item)        print "  Removing old backup: ", old_backup_subdir        deltree(old_backup_subdir)def find_next_backup_name(youngest):    # If there is already a backup of this revision, then append the next    # highest increment to the path.  We still need to do a backup because the    # repository might have changed despite no new revision having been    # created.  We find the highest increment and add one rather than start    # from 1 and increment because the starting increments may have already    # been removed due to options.keep.    regexp = re.compile(options.repo + "-" + youngest + "(-(?P<increment>[0-9]+))?$")    directory_list = os.listdir(options.backup_dir)    young_list = [ x for x in directory_list if regexp.match(x) ]    young_list.sort(comparator)    if not young_list:        return "%s-%s" %(options.repo, youngest)    # Backups for this revision exist already.    if not options.force:        if not options.quiet:            print "Backup already exists at",young_list[-1]        raise SystemExit    increment = int(regexp.match(young_list[-1]).groupdict()['increment'] or '0')    return "%s-%s-%d" %(options.repo, youngest, increment+1)def do_rsync_backup():    youngest = get_youngest_revision()    if not options.quiet:        print "Beginning hot backup of '%s' (youngest revision is %s)..." %(options.repo, youngest),    backup_subdir = os.path.join(options.backup_dir, find_next_backup_name(youngest))    backup_tmpdir = backup_subdir + '.tmp'    if os.path.exists(backup_tmpdir):        raise SystemExit("%s: Backup in progress?  '%s' exists -- aborting."%(sys.argv[0],backup_tmpdir))    if not options.simulate:        os.mkdir(backup_tmpdir)                     # ensures atomicity    if os.path.exists(backup_subdir):        # Check again after doing mkdir (which serves as a mutex acquire) --        # just in case another process just finished the same backup.        if not options.quiet:            print "Backup already exists at",backup_subdir        raise SystemExit    previous_backups = list_repo_backups()    ### Use rsync to make a copy.    # We need to copy the 'current' file first.    # Don't copy the transactions/ directory.    # See http://svn.collab.net/repos/svn/trunk/notes/fsfs    rsync_dest = os.path.join(backup_tmpdir,'')    # copy db/current.  -R tells rsync to use relative pathnames.    if runcmd(['rsync', '-aR', 'db/current', rsync_dest]):        raise "%s: rsync failed" %sys.argv[0]    # Now copy everything else.    cmd = [rsync, '-a',           '--exclude', 'db/current',           '--exclude', 'db/transactions/*',           '--exclude', 'db/log.*',           '.', rsync_dest]    # If there's a previous backup, make hard links against the latest.    if previous_backups:        cmd += ['--link-dest', os.path.join(options.backup_dir, previous_backups[-1])]    if runcmd(cmd):        raise "%s: rsync failed" %sys.argv[0]    # Rename to final name.    if not options.simulate:        os.rename(backup_tmpdir, backup_subdir)    print "Finished backup to", backup_subdiroptions = parse_commandline()os.chdir(options.repo_dir)do_rsync_backup()delete_old_backups()

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人伦理片在线| 欧美日韩一区二区三区不卡| 亚洲综合网站在线观看| 欧美精品一区二区三区蜜臀| 色伊人久久综合中文字幕| 六月丁香综合在线视频| 亚洲尤物视频在线| 欧美激情自拍偷拍| 日韩视频在线一区二区| 91高清视频在线| 丁香婷婷综合色啪| 精品一区二区三区在线视频| 亚洲成人自拍一区| 亚洲精品乱码久久久久久黑人 | 韩国精品主播一区二区在线观看 | 日本不卡中文字幕| 亚洲综合一二三区| 亚洲女厕所小便bbb| 国产三级欧美三级日产三级99| 欧美剧在线免费观看网站| 色94色欧美sute亚洲线路二| av在线综合网| 99热国产精品| 99国产欧美久久久精品| 福利电影一区二区三区| 国产激情一区二区三区四区 | 成人av在线资源网站| 国产精品资源网站| 久久99九九99精品| 欧美aaaaa成人免费观看视频| 亚洲国产欧美一区二区三区丁香婷| 国产精品二三区| 国产精品免费视频一区| 国产亚洲婷婷免费| 国产日韩欧美一区二区三区综合| 亚洲精品一线二线三线| 精品日韩一区二区三区| 欧美大白屁股肥臀xxxxxx| 日韩一区二区免费高清| 91精选在线观看| 欧美一级久久久久久久大片| 欧美高清dvd| 日韩欧美一级二级三级久久久| 91精品一区二区三区在线观看| 欧美日本精品一区二区三区| 欧美精品一卡二卡| 日韩亚洲欧美一区二区三区| 日韩午夜电影av| 精品对白一区国产伦| 国产欧美日韩视频一区二区| 国产精品乱码久久久久久| 国产精品久久久一区麻豆最新章节| 国产精品色婷婷久久58| 国产一区欧美二区| 国产精品一区二区在线观看网站 | 亚洲一区二区三区四区不卡| 性做久久久久久免费观看欧美| 午夜欧美大尺度福利影院在线看 | 91在线播放网址| 欧美色视频一区| 日韩欧美一区在线| 久久精品人人做人人爽97| 国产精品福利av| 丝瓜av网站精品一区二区 | 激情综合色综合久久综合| 成人午夜在线播放| 色综合久久中文综合久久97| 欧美日韩一区视频| 精品少妇一区二区三区在线播放| 国产日产亚洲精品系列| 亚洲欧洲综合另类在线 | 色噜噜狠狠成人网p站| 欧美丰满少妇xxxxx高潮对白| 26uuu亚洲| 一区二区三区欧美日| 美女精品自拍一二三四| 高清成人在线观看| 欧美日韩国产首页在线观看| 精品国产一二三| 亚洲女人****多毛耸耸8| 美女视频第一区二区三区免费观看网站 | 国产性色一区二区| 亚洲午夜免费视频| 国产电影一区在线| 欧美另类变人与禽xxxxx| 国产欧美日韩麻豆91| 亚洲sss视频在线视频| 国产高清久久久| 欧美精品在线一区二区| 中文字幕+乱码+中文字幕一区| 午夜伊人狠狠久久| 99久久99久久精品国产片果冻| 91精品国产色综合久久| 亚洲女同女同女同女同女同69| 国产麻豆欧美日韩一区| 欧美日韩一区二区在线观看视频 | 日韩激情视频在线观看| 91影视在线播放| 久久久久久日产精品| 无码av中文一区二区三区桃花岛| 懂色av一区二区三区免费看| 日韩一卡二卡三卡四卡| 亚洲一区二区视频在线观看| 国产精品69久久久久水密桃| 欧美日韩成人综合在线一区二区| 国产精品青草综合久久久久99| 久久精品国产精品亚洲综合| 欧亚一区二区三区| 中文字幕电影一区| 麻豆视频观看网址久久| 欧洲人成人精品| 亚洲欧美另类久久久精品2019| 国产一区二区免费看| 欧美一区二区不卡视频| 一区二区欧美视频| 99久久99久久综合| 国产精品无人区| 成人中文字幕在线| 久久美女高清视频| 韩国精品免费视频| 亚洲精品一区二区三区精华液| 日本不卡一二三| 91精品在线免费| 免费高清在线一区| 欧美日韩不卡视频| 亚洲成人激情社区| 欧美日韩一区二区在线视频| 亚洲国产综合色| 欧美性猛交一区二区三区精品| 一级中文字幕一区二区| 99久久婷婷国产| 亚洲欧洲另类国产综合| 成人av电影在线播放| 中文字幕一区二区三区色视频| 成人免费电影视频| 国产精品久久精品日日| 成人禁用看黄a在线| 中文字幕亚洲在| 色爱区综合激月婷婷| 亚洲综合偷拍欧美一区色| 欧美日韩国产一区二区三区地区| 午夜不卡在线视频| 日韩精品自拍偷拍| 国产一区二区在线观看免费| 国产午夜亚洲精品午夜鲁丝片| 成人午夜av在线| 综合中文字幕亚洲| 91国产福利在线| 男男成人高潮片免费网站| 日韩一级视频免费观看在线| 国产在线一区二区综合免费视频| 久久久噜噜噜久久人人看| 成人妖精视频yjsp地址| 日韩理论电影院| 欧美卡1卡2卡| 国产在线精品免费| 国产精品久久久一本精品| 欧美性大战xxxxx久久久| 男男gaygay亚洲| 国产精品欧美一区二区三区| 色婷婷av一区二区三区大白胸| 亚洲成在人线在线播放| 久久蜜桃香蕉精品一区二区三区| av日韩在线网站| 亚洲超丰满肉感bbw| 久久久久97国产精华液好用吗| 91片黄在线观看| 视频一区在线播放| 日本一区二区三区高清不卡| 成人激情午夜影院| 日本高清不卡aⅴ免费网站| 久久久久久久久蜜桃| 菠萝蜜视频在线观看一区| 午夜影院久久久| 国产欧美精品一区二区色综合朱莉| 91蝌蚪porny| 精品亚洲免费视频| 亚洲乱码国产乱码精品精小说| 日韩一区和二区| bt欧美亚洲午夜电影天堂| 天堂va蜜桃一区二区三区| 日本一区二区三区久久久久久久久不| 在线看日本不卡| 国产成人在线影院| 日韩在线一二三区| 国产精品国产三级国产a| 欧美一区二区免费观在线| av在线一区二区三区| 蜜桃av一区二区三区| 亚洲精选一二三| 久久久久久**毛片大全| 欧美日韩在线三级| av在线这里只有精品| 激情小说欧美图片| 亚洲成人综合视频| 成人欧美一区二区三区| 久久毛片高清国产| 日韩精品专区在线| 欧美日高清视频| 日本道在线观看一区二区|