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

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

?? rlog.py

?? PHP寫的圖片查看器
?? PY
字號(hào):
# -*- Mode: python -*-## Copyright (C) 2000-2001 The ViewCVS Group. All Rights Reserved.## By using this file, you agree to the terms and conditions set forth in# the LICENSE.html file which can be found at the top level of the ViewCVS# distribution or at http://viewcvs.sourceforge.net/license-1.html.## Contact information:#   Greg Stein, PO Box 760, Palo Alto, CA, 94302#   gstein@lyra.org, http://viewcvs.sourceforge.net/## -----------------------------------------------------------------------#import osimport stringimport reimport time## RLogOutputParser uses the output of rlog to build a list of Commit## objects describing all the checkins from a given RCS file; this## parser is fairly optimized, and therefore can be delicate if the## rlog output varies between versions of rlog; I don't know if it does;## to make really fast, I should wrap the C rcslib## there's definately not much error checking here; I'll assume things## will go smoothly, and trap errors via exception handlers above this## function## exception for this classerror = 'rlog error'class RLogData:    "Container object for all data parsed from a 'rlog' output."      def __init__(self, filename):        self.filename = filename        self.symbolic_name_hash = {}        self.rlog_entry_list = []    def LookupBranch(self, rlog_entry):        index = string.rfind(rlog_entry.revision, '.')        branch_revision = rlog_entry.revision[:index]        try:            branch = self.symbolic_name_hash[branch_revision]        except KeyError:            branch = ''        return branch    class RLogEntry:    ## static constants for type of log entry; this will be changed    ## to strings I guess -JMP    CHANGE = 0    ADD = 1    REMOVE = 2## Here's the init function, which isn't needed since this class## is fully initalized by RLogParser when creating a new log entry.## Let's keep this initializer as a description of what is held in## the class, but keep it commented out since it only makes things## slow.####     def __init__(self):##         self.revision = ''##         self.author = ''##         self.branch = ''##         self.pluscount = ''##         self.minuscount = ''##         self.description = ''##         self.time = None##         self.type = RLogEntry.CHANGEclass RLog:    "Provides a alternative file-like interface for running 'rlog'."        def __init__(self, cfg, filename, revision, date):        self.filename = self.fix_filename(filename)        self.checkout_filename = self.create_checkout_filename(self.filename)        self.revision = revision        self.date = date        arg_list = []        if self.revision:            arg_list.append('-r%s' % (self.revision))        if self.date:            arg_list.append('-d%s' % (self.date))        temp = os.path.join(cfg.general.rcs_path, "rlog")        self.cmd = '%s %s "%s"' % (temp, string.join(arg_list), self.filename)        self.rlog = os.popen(self.cmd, 'r')    def fix_filename(self, filename):        ## all RCS files have the ",v" ending        if filename[-2:] != ",v":            filename = "%s,v" % (filename)        if os.path.isfile(filename):            return filename        ## check the Attic for the RCS file        path, basename = os.path.split(filename)        filename = os.path.join(path, "Attic", basename)        if os.path.isfile(filename):            return filename                raise error, "rlog file not found: %s" % (filename)    def create_checkout_filename(self, filename):        ## cut off the ",v"        checkout_filename = filename[:-2]        ## check if the file is in the Attic        path, basename = os.path.split(checkout_filename)        if path[-6:] != '/Attic':            return checkout_filename        ## remove the "Attic" part of the path        checkout_filename = os.path.join(path[:-6], basename)        return checkout_filename            def readline(self):        try:            line = self.rlog.readline()        except AttributeError:            self.error()                    if line:            return line        status = self.close()        if status:            self.error()        return None    def close(self):        status = self.rlog.close()        self.rlog = None        return status    def error(self):        raise error, "unexpected rlog exit: %s" % (self.cmd)## constants used in the output parser_rlog_commit_sep = '----------------------------\n'_rlog_end = '=============================================================================\n'## regular expression used in the output parser_re_symbolic_name = re.compile("\s+([^:]+):\s+(.+)$")_re_revision = re.compile("^revision\s+([0-9.]+).*")_re_data_line = re.compile(    "^date:\s+(\d+)/(\d+)/(\d+)\s+(\d+):(\d+):(\d+);\s+"\    "author:\s+([^;]+);\s+"\    "state:\s+([^;]+);\s+"\    "lines:\s+\+(\d+)\s+\-(\d+)$")_re_data_line_add = re.compile(    "^date:\s+(\d+)/(\d+)/(\d+)\s+(\d+):(\d+):(\d+);\s+"\    "author:\s+([^;]+);\s+"\    "state:\s+([^;]+);$")class RLogOutputParser:        def __init__(self, rlog):        self.rlog = rlog        self.rlog_data = RLogData(rlog.checkout_filename)        ## run the parser        self.parse_to_symbolic_names()        self.parse_symbolic_names()        self.parse_to_description()        self.parse_rlog_entries()        def parse_to_symbolic_names(self):        while 1:            line = self.rlog.readline()            if line[:15] == 'symbolic names:':                break    def parse_symbolic_names(self):        ## parse all the tags int the branch_hash, it's used later to get        ## the text names of non-head branches        while 1:            line = self.rlog.readline()            match = _re_symbolic_name.match(line)            if not match:                break            (tag, revision) = match.groups()            ## check if the tag represents a branch, in RCS this means            ## the second-to-last number is a zero            index = string.rfind(revision, '.')            if revision[index-2:index] == '.0':                revision = revision[:index-2] + revision[index:]                        self.rlog_data.symbolic_name_hash[revision] = tag    def parse_to_description(self):        while 1:            line = self.rlog.readline()            if line[:12] == 'description:':                break                    ## eat all lines until we reach '-----' seperator        while 1:            line = self.rlog.readline()            if line == _rlog_commit_sep:                break    def parse_rlog_entries(self):        while 1:            rlog_entry = self.parse_one_rlog_entry()            if not rlog_entry:                break            self.rlog_data.rlog_entry_list.append(rlog_entry)    def parse_one_rlog_entry(self):        ## revision line/first line        line = self.rlog.readline()	# Since FreeBSD's rlog outputs extra "---...---\n" before	# "===...===\n", _rlog_end may be occured here.        if not line or line == _rlog_end:            return None        ## revision        match = _re_revision.match(line)        (revision,) = match.groups()        ## data line        line = self.rlog.readline()        match = _re_data_line.match(line)        if not match:            match = _re_data_line_add.match(line)        if not match:            raise error, "bad rlog parser, no cookie!"        ## retrieve the matched grops as a tuple in hopes        ## this will be faster (ala profiler)        groups = match.groups()        year = string.atoi(groups[0])        month = string.atoi(groups[1])        day = string.atoi(groups[2])        hour = string.atoi(groups[3])        minute = string.atoi(groups[4])        second = string.atoi(groups[5])        author = groups[6]        state = groups[7]        ## very strange; here's the deal: if this is a newly added file,        ## then there is no plus/minus count count of lines; if there        ## is, then this could be a "CHANGE" or "REMOVE", you can tell        ## if the file has been removed by looking if state == 'dead'        try:            pluscount = groups[8]            minuscount = groups[9]        except IndexError:            pluscount = ''            minuscount = ''            cmit_type = RLogEntry.ADD        else:            if state == 'dead':                cmit_type = RLogEntry.REMOVE            else:                cmit_type = RLogEntry.CHANGE                ## branch line: pretty much ignored if it's there        desc_line_list = []                        line = self.rlog.readline()        if not line[:10] == 'branches: ':            desc_line_list.append(string.rstrip(line))        ## suck up description        while 1:            line = self.rlog.readline()            ## the last line printed out by rlog is '===='...            ## or '------'... between entries            if line == _rlog_commit_sep or line == _rlog_end:                break            ## append line to the descripton list            desc_line_list.append(string.rstrip(line))        ## compute time using time routines in seconds from epoc GMT        ## NOTE: mktime's arguments are in local time, and we have        ##       them in GMT from RCS; therefore, we have to manually        ##       subtract out the timezone correction        ##        ## XXX: Linux glib2.0.7 bug: it looks like mktime doesn't honor        ##      the '0' flag to force no timezone correction, so we look        ##      at the correction ourself and do the right thing after        ##      mktime mangles the date        gmt_time = \            time.mktime((year, month, day, hour, minute, second, 0, 0, -1))        if time.localtime(gmt_time)[8] == 1:            # dst time active?              # XXX: This is still wrong in those both nights,             #      where the switch between DST and normal time occurs.            gmt_time = gmt_time - time.altzone        else:            gmt_time = gmt_time - time.timezone        ## now create and return the RLogEntry        rlog_entry = RLogEntry()        rlog_entry.type = cmit_type        rlog_entry.revision = revision        rlog_entry.author = author        rlog_entry.description = string.join(desc_line_list, '\n')        rlog_entry.time = gmt_time        rlog_entry.pluscount = pluscount        rlog_entry.minuscount = minuscount        return rlog_entry## entrypointsdef GetRLogData(cfg, path, revision = '', date = ''):    rlog = RLog(cfg, path, revision, date)    rlog_parser = RLogOutputParser(rlog)    return rlog_parser.rlog_data

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产又粗又猛又爽又黄91精品| 精品一区二区三区蜜桃| 这里只有精品免费| 成人午夜av电影| 日韩精品一二三| 亚洲视频 欧洲视频| 亚洲精品一区二区精华| 欧美日韩中文另类| a在线播放不卡| 国产麻豆精品在线观看| 日本在线播放一区二区三区| 一区二区三区.www| 最好看的中文字幕久久| 精品国产一区二区亚洲人成毛片 | 国产一区二区三区av电影| 一片黄亚洲嫩模| 中文字幕在线不卡国产视频| 精品福利在线导航| 3d动漫精品啪啪| 精品视频1区2区| 91污片在线观看| 成人美女视频在线观看18| 久久9热精品视频| 日韩国产欧美视频| 亚洲超碰97人人做人人爱| 夜夜操天天操亚洲| 亚洲色图丝袜美腿| 一色屋精品亚洲香蕉网站| 国产精品麻豆久久久| 久久精品人人做人人爽人人 | 一区二区三区四区av| 国产日产欧美一区二区视频| 欧美成人一区二区三区| 欧美成人精品3d动漫h| 日韩女优制服丝袜电影| 日韩欧美色综合网站| 日韩欧美国产综合一区| 日韩女优毛片在线| 亚洲精品一区二区三区精华液 | 成人精品高清在线| 成人一区二区三区中文字幕| 国产成人综合亚洲网站| 国产成人精品一区二区三区网站观看 | 国产嫩草影院久久久久| 日本一区二区视频在线| 国产欧美一区视频| 中文字幕在线观看一区二区| 中文无字幕一区二区三区| 亚洲国产精品黑人久久久| 成人欧美一区二区三区| 一区二区三区欧美在线观看| 亚洲一区二区黄色| 日韩精品一二区| 国模无码大尺度一区二区三区| 国产福利视频一区二区三区| 国产不卡视频一区二区三区| 91在线免费视频观看| 欧美在线一区二区三区| 欧美剧在线免费观看网站| 欧美成人性战久久| 日本一区二区动态图| 亚洲免费三区一区二区| 视频在线观看一区| 狠狠色丁香九九婷婷综合五月| 粉嫩久久99精品久久久久久夜| 色综合咪咪久久| 欧美一区二区视频观看视频| 亚洲精品在线免费播放| 1000部国产精品成人观看| 午夜视频久久久久久| 国产在线精品不卡| 91丨porny丨最新| 3751色影院一区二区三区| 久久综合九色综合97婷婷女人| 最新成人av在线| 免费成人在线播放| 成人app在线| 7777精品伊人久久久大香线蕉最新版| 欧美mv日韩mv亚洲| 亚洲精选免费视频| 麻豆国产欧美日韩综合精品二区| 国产98色在线|日韩| 欧美日本在线看| 中文字幕免费在线观看视频一区| 亚洲国产精品影院| 夫妻av一区二区| 欧美男生操女生| 国产精品天干天干在线综合| 日韩激情视频网站| 成人国产亚洲欧美成人综合网| 欧美日韩一区二区在线视频| 中文字幕欧美三区| 美女一区二区三区在线观看| 99久久综合色| 精品av综合导航| 亚洲不卡av一区二区三区| 丁香六月综合激情| 日韩一级完整毛片| 夜夜嗨av一区二区三区网页| 豆国产96在线|亚洲| 国产精品一区二区在线播放 | 国产精品一区2区| 成人综合在线观看| 色综合久久久久久久久| 欧美三级视频在线| 国产精品国产三级国产aⅴ入口| 日韩国产精品久久久| av在线不卡网| 精品久久久久久久人人人人传媒| 亚洲乱码国产乱码精品精可以看| 久久国产精品第一页| 欧美日韩国产高清一区| 亚洲日本一区二区| 国产精品一区免费在线观看| 欧美高清精品3d| 亚洲美腿欧美偷拍| 成人高清视频在线| 久久久久久久电影| 精品制服美女久久| 欧美一级高清大全免费观看| 亚洲国产综合在线| 欧美亚洲国产bt| 亚洲黄色小视频| 91麻豆文化传媒在线观看| 国产精品萝li| eeuss鲁片一区二区三区在线观看| 久久色在线视频| 激情综合色播激情啊| 欧美www视频| 久久超碰97人人做人人爱| 欧美一三区三区四区免费在线看 | 九色|91porny| 日韩亚洲欧美中文三级| 日本vs亚洲vs韩国一区三区二区| 欧美亚日韩国产aⅴ精品中极品| 亚洲精品国产第一综合99久久 | xvideos.蜜桃一区二区| 精品一区二区三区av| 欧美精品一区二区三区四区| 久久激情综合网| 国产日韩欧美不卡在线| 成人一级黄色片| 最新国产成人在线观看| 一本大道av一区二区在线播放 | 麻豆91精品视频| 精品久久久久久最新网址| 国产毛片精品一区| 国产精品女同一区二区三区| 99久久国产综合精品色伊| 亚洲欧美日本在线| 欧美色国产精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美r级在线观看| 国产69精品久久777的优势| 自拍偷拍欧美激情| 欧美蜜桃一区二区三区| 蜜臀91精品一区二区三区| 久久久久国产精品人| av在线不卡免费看| 亚洲妇女屁股眼交7| 欧美岛国在线观看| 成人av电影免费在线播放| 亚洲午夜免费视频| 日韩美女一区二区三区四区| 国产91在线观看| 亚洲一区二区视频| 26uuu国产一区二区三区| av亚洲精华国产精华| 午夜欧美大尺度福利影院在线看| wwwwxxxxx欧美| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 色婷婷综合久久| 日韩av一级电影| 国产免费成人在线视频| 欧美日韩国产精品自在自线| 美美哒免费高清在线观看视频一区二区| 精品处破学生在线二十三| 97国产一区二区| 精品在线一区二区| 亚洲免费观看高清完整版在线| 91精品国产免费| 99久久精品费精品国产一区二区 | 色综合久久中文综合久久97| 日韩**一区毛片| 亚洲人成网站影音先锋播放| 91精品国产综合久久久久久| 床上的激情91.| 免费成人深夜小野草| 亚洲免费在线视频| 久久精品一区四区| 欧美日韩国产三级| 99v久久综合狠狠综合久久| 裸体在线国模精品偷拍| 一区二区三区在线视频免费| 精品国产一区二区三区忘忧草| 欧美午夜不卡在线观看免费| 国产999精品久久久久久绿帽| 日本欧美加勒比视频| 亚洲狠狠丁香婷婷综合久久久| 国产亚洲欧美色|