Something like this seems to work:
from dulwich import repo, diff_tree
fn = 'a.txt'
r = repo.Repo('.')
prev = None
walker = r.get_graph_walker()
cset = walker.next()
while cset is not None:
commit = r.get_object(cset)
if prev is None:
prev = commit.tree
cset = walker.next()
continue
res = None
delta = diff_tree.tree_changes(r, prev, commit.tree)
for x in diff_tree.tree_changes(r, prev, commit.tree):
if x.new.path == fn:
res = cset
break
if res:
break
prev = commit.tree
cset = walker.next()
print fn, res