如何找到特定线路何时引入?

时间:2011-11-21 14:54:54

标签: perforce

在我的代码库中;我看到行< 123>在特定文件中;我想知道什么时候介绍它。我可以做'p4 annotate'找到它上次修改的时间;但我确信有一种方法可以退回到介绍......我正在使用2009.2;如果重要的话,不是最新的...

-Chris

编辑

这可能是一个糟糕的问题;我通过走回树直到找到它的添加位置来解决我的问题,基本上......

p4 annotage | grep

p4 annotage myFile#rev-1 | grep

p4 annotage myFile#rev-1 | grep

2 个答案:

答案 0 :(得分:10)

如果安装了p4v,则应使用延时视图。这将为您提供文件中所有行的记录,引入或更改这些更改的人员,更改列表等等.Timelaspse是一个非常棒的工具,可以为您提供所需的内容,而无需诉诸旧版本。

答案 1 :(得分:1)

ruby​​中的解决方案

file = "/path/to/your/file"
period = "#8,10" # could be @2012/10/01,@now
$all_authors = []

def find_changed_lines file, period
    puts "File: #{file}#{period}"
    ls = `p4 annotate -a #{file}#{period}`.split"\n"

    a = []; b = []; prevrev = ""; linen = 0; authors = []

    # find [first, last] aka [min, max] file revisions for given period
    ls.each{ |l| l[ /^([0-9]+)-([ 0-9]+):/ ]; a<<$1.to_i if $1; b<<$2.to_i if $2; }
    first = a.min.to_s; last = b.max.to_s

    # find changed lines
    ls.each{ |l|
        l[ /^([0-9]+)-([ 0-9]+):/ ]
        # find line number
        linen +=1 if $2==last
        # reject lines if #not changed line or #itermediate change
        unless ($1==first and $2==last) or ($1!=first and $2!=last)
            # find rev#
            rev = $2==last ? $1 : ($2.to_i+1).to_s
            # print cl desc info based on rev# unless printed for prev line
            if prevrev != rev
                cldesc =  `p4 filelog -m 1 #{file}##{rev} | head -2 | tail -1`
                puts cldesc
                # collect change author
                authors << cldesc[/by (.*)@/, 1]
                prevrev = rev
            end
            # print changed line with line number
            puts l.sub(/^.*:/, "#{linen}:" )
        end
    }
    puts "Change authors: #{authors.uniq!.join(', ')}"
    $all_authors += authors
end

find_changed_lines file, period