Linux kernel官网cgit工具不支持按变更代码进行补丁搜索,想到个办法就是把补丁都抓下来,这样可以在本地搜索。花了2个小时写了个小工具,话不多说,直接看效果:

E:\docs\TOOLS\python\patch_spider>python patch_spider.py linux-3.10.y fs/ubifs 2013-08-15:

get patches info...

2016-08-27 eed1a4028c96cabb79747ee01e17b1057b01027c UBIFS: Implement ->migratepage()

2014-11-14 6f1aec53eded9399e6b44cab8c9aa36c65a8f402 UBIFS: fix free log space calculation

2014-11-14 918ecf66a11bb3bdc818a264319dcaf984c11a3f UBIFS: fix a race condition

2014-11-14 c4e70e76860cc84cebd719fbd89637fdd226cf94 UBIFS: remove mst_mutex

2014-07-07 6f02490b96062bdd8a7914e1287a70c5a01d6a3d UBIFS: Remove incorrect assertion in shrink_tnc()

2014-07-07 ac8df9ec7b4e25b87d5a71dfd9af4d8076d66bff UBIFS: fix an mmap and fsync race condition

saving patches into...

[1/6] save fs_ubifs\UBIFS__Implement___gt_migratepage__.patch

[2/6] save fs_ubifs\UBIFS__fix_free_log_space_calculation.patch

[3/6] save fs_ubifs\UBIFS__fix_a_race_condition.patch

[4/6] save fs_ubifs\UBIFS__remove_mst_mutex.patch

[5/6] save fs_ubifs\UBIFS__Remove_incorrect_assertion_in_shrink_tnc__.patch

[6/6] save fs_ubifs\UBIFS__fix_an_mmap_and_fsync_race_condition.patch

done

源码

#!/usr/bin/python

# -*- coding: utf-8 -*-

######################################################################

# Purpose: auto download kernel module patch from offical web

# Useage: ./patch_spider.py

# example: patch_spider.py linux-3.10.y fs/ubifs 2013-08-15:2016-11-11

# Version: Initial Version by Alex

######################################################################

import httplib, urllib, urllib2

import sys, os

import datetime

import re

DEBUG = 0

if DEBUG: from pprint import *

class PatchSpider(object):

def __init__(self):

pass

def run(self):

# main function

print 'get patches info...'

patch_ids = self.get_patch_id()

print 'saving patches into...'

ret = self.save_patch_file(patch_ids)

print 'done'

return 0

def get_patch_id(self):

# get online data

response_data = []

urlstr = "http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/log/%s?h=%s&ofs=%d"

dt_format = '%Y-%m-%d'

start, end = args['date-range'].split(':')

if not start.strip(): start = datetime.datetime.now().strftime(dt_format)

if not end.strip(): end = datetime.datetime.now().strftime(dt_format)

dt_start = datetime.datetime.strptime(start, dt_format)

dt_end = datetime.datetime.strptime(end, dt_format)

for ofs in range(0, 10000, 50):

url = urlstr % (args['module'], args['version'], ofs)

req = urllib2.Request(url)

try:

response = urllib2.urlopen(req).read()

for item in self.extract_from(response):

date, id, msg = item

dt_date = datetime.datetime.strptime(date, dt_format)

if dt_start <= dt_date <= dt_end:

print date, id, msg

response_data.append(item)

else:

return response_data

except urllib2.HTTPError, e:

print('HTTPError = ' + str(e.code))

except urllib2.URLError, e:

print('URLError = ' + str(e.reason))

except httplib.HTTPException, e:

print('HTTPException')

except Exception:

raise

return response_data

def save_patch_file(self, l):

format = 'http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/patch/%s?id=%s'

folder = self.assemble_path(args['module'])

if os.path.exists(folder):

print '%s existed, please backup your data!' %folder

return -1

else:

os.makedirs(folder)

log = ["%s %s %s\n" %(i[0],i[1],i[2]) for i in l]

open(os.path.join(folder, 'patches.log'), 'w').writelines(log)

total = len(l)

for index, item in enumerate(l):

_,id,msg = item

patch = format % (args['module'], id)

file = os.path.join(folder, self.assemble_path(msg) + '.patch')

urllib.urlretrieve(patch, file)

print "[%d/%d] save %s" %(index+1, total, file)

def extract_from(self, html):

res = r"""

.*?

(?P\d+-\d+-\d+).*?

\w+)'>(?P.*?).*?

"""

rec = re.compile(res, re.DOTALL|re.VERBOSE)

return re.findall(rec,html)

def assemble_path(self, msg):

path = ''

for c in msg:

path += c if c.isalnum() else '_'

return path

# default args

args = {

"version": "linux-3.10.y",

"module": "fs/ubifs",

"date-range": "2013-08-15:",

}

if len(sys.argv) > 1:

args['version'] = sys.argv[1]

if len(sys.argv) > 2:

args['module'] = sys.argv[2]

if len(sys.argv) > 3:

args['date-range'] = sys.argv[3]

ret = PatchSpider().run()

sys.exit(ret)

Linux内核调试的方式以及工具集锦【转】

转自:https://blog.csdn.net/gatieme/article/details/68948080 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

Linux内核调试的方式以及工具集锦

原文:https://blog.csdn.net/gatieme/article/details/68948080 CSDN GitHubLinux内核调试的方式以及工具集锦 LDD-LinuxDev ...

linux下常用网页查看下载工具--wget

http://www.linuxidc.com/Linux/2015-06/118256.htm 5 个基于Linux命令行的文件下载和网站浏览工具 rTorrent.wget.cURL.w3m.El ...

Linux内核补丁升级

如果机器已经联网,直接利用包管理工具更新,需要注意的是现在3.0以上的内核引入了签名机制,需要导入签名的key,参考步骤如下: 1.导入keyrpm --import https://www.elre ...

Linux部署之批量自动安装系统之TFTP篇

1.         安装:yum install tftp-server –y   2.         配置tftp文件开启tftp功能   3.         开启依赖服务xinetd   4 ...

linux内核开源代码地址下载

https://www.kernel.org/pub/linux/kernel/v2.6/

Linux部署之批量自动安装系统之测试篇

1.         客户端从网络启动如下   2.         复制vesamenu.c32文件可解决上面的问题   3.         客户端再次启动   4.         选择第一个进 ...

Linux部署之批量自动安装系统之Kickstart篇

1.         安装   2.         在桌面环境下啊配置   3.         Kickstart之基本配置   4.         Kickstart之安装方法   5.    ...

Linux部署之批量自动安装系统之NFS篇

1.         编辑配置文件让远端设备可访问vim /etc/exports   2.         启动服务

随机推荐

expect脚本语言用法示例

#!/usr/bin/expect set hostname [lindex $argv 0] set username [lindex $argv 1] set passwd [lindex $ar ...

学习Python的ABC模块&lpar;转&rpar;

http://yansu.org/2013/06/09/learn-Python-abc-module.html 1.abc模块作用 Python本身不提供抽象类和接口机制,要想实现抽象类,可以借助a ...

Spring-Context之七&colon;使用p-namesapce和c-namespace简化bean的定义

在Spring中定义bean的方式多种多样,即使使用xml的方式来配置也能派生出很多不同的方式. 比如如下的bean定义: 1 2 3 4 5 6 7 8 9 10 11 12

jquery 图片上传本地预览V1&period;2

基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari 代码进行小小的压缩 如果看源码 自己解压就行了 版本已升级  修复jquery版本问题  支持任意jqu ...

hdu2044java递推

一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

处理div 在IE6 IE7 IE8 下不居中的问题

具体处理方式如下:1 .html 顶部加入:DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

js移动端向左滑动出现删除按钮

最近在做移动端项目时,需要实现一个列表页面的每一项item向左滑动时出现相应的删除按钮,本来想着直接使用zepto的touch.js插件,因为之前实现相同的功能时用过这个插件,当时还挺好用的,直接使用 ...

解决:java&period;io&period;IOException&colon; No FileSystem for scheme&colon; hdfs

解决:java.io.IOException: No FileSystem for scheme: hdfs 开发项目初期,写完代码开始放到服务器上开始测试的时候,报出这样的一个错,不知道怎么处理了, ...

Android项目刮刮奖详解(三)

Android项目刮刮奖详解(二) 前言 上一期我们已经实现了一个简易的刮刮卡功能,这一期我们来将其完善一下 目标 将刮刮奖的宽高改为合适高度 将刮刮奖位置居中 将信息层的图片换成文字(重点) 实现 ...

QT qss资源文件与代码分离

在最近的Qt相关项目开发中,有不同客户提出更改logo图片的需求,每次更换一张图片需要重新添加到.qrc资源文件,并重新编译源代码生产可执行文件,操作效率极低,频繁修改源代码也 容易引起其他不可靠问题 ...

linux补丁怎么下载工具,Linux内核补丁批量自动下载工具相关推荐

  1. php 打包下载网络图片,PHP实现图片批量打包下载功能

    上次遇到一个需要打包下载批量图片的问题,找了一下发现这个好方法,记录一下. 首先新建一个zipfile打包类: class zipfile { var $datasec = array (); var ...

  2. 爬虫学习之批量自动下载歌曲

    音乐自动下载 需求 配置文件 代码 结果 需求 例如我想把JJ(林俊杰)的一些歌曲给下载下来,例如下图是我通过该平台网页版搜索JJ,灰色的无法下载,黑色的可以下载 去看原文 配置文件 #歌手名 SIN ...

  3. vue实现前台生成word并下载,并且可实现批量打包下载

    一.引用场景: 前面的一个项目里面有一个申报表,后台收集的申报表需要批量导出,一开始我是用到的C#的WordOpApControlle,但是这种方法存在一个难以解决的问题.就是当你导出的这个word模 ...

  4. CCTalk网课批量自动下载工具

    CCTalk网课下载工具 下载工具: https://wwx.lanzoui.com/b010c6jba 密码:8hxj 首次启动需要下载相关依赖,依赖下载完成会弹出一个新的浏览器进行登录 登录完成后 ...

  5. Python批量自动下载获取图片

    import requests from bs4 import BeautifulSoup import json import eventlet import osurlshu = 1 #url中f ...

  6. 利用python脚本批量自动下载Sentinel-1(哨兵1号)数据

    在asf欧空局官网查看所下载的哨兵数据名称,然后名称打入下面脚本即可 在 python ./download-all-2022-06-02_07-20-25.py前需要把下载数据的79写入自己数据的名 ...

  7. a链接下载文件或者点击按钮自动下载

    文件下载方法 downloadFile(fileName:string,filePath:string){this.service.downloadFile(filePath).subscribe(f ...

  8. 【jQuery】jQuery与vue实现点击下载图片 以及js实现批量打包下载图片

    原理:用canvas的toDataUrl() API获取到图片的base64编码,再利用触发a标签事件进行下载.(单张图片下载) 多张图片批量下载导出压缩包需要引入jsZip jQuery实现点击下载 ...

  9. 如何用python批量下载数据_利用python脚本,批量自动下载欧洲中心的气象数据

    登录后查看更多精彩内容~ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 leeol 于 2017-10-27 18:22 编辑 更新:近日我在下数据时发现EC微调了下载方法,具体 ...

最新文章

  1. 地摊重现江湖,疫情带给我们的意外收获
  2. 决战 平安京服务器维护,《决战!平安京》2018年9月7日维护公告
  3. oracle将213变成123,oracle 转换函数
  4. windows双机调试
  5. jQuery+php+ajax实现无刷新上传文件功能
  6. 提示丢失libgcc_s_dw2-1.dll问题
  7. Jmater参数说明
  8. 孙丕恕:应把云计算大数据融在一起 降低社会运营成本
  9. DTC精彩回顾—王义成:国产数据库技术发展的探索与思考
  10. [JZOJ P1281] [DP]背包的第k优解
  11. java获取map遍历,Map获取键值,Map的几种遍历方法总结(推荐)
  12. 异常:Invalid or unexpected token
  13. 【九度OJ】题目1084:整数拆分
  14. 别再为了this发愁了:JS中的this机制
  15. 学计算机的高等数学,高等数学-计算机类
  16. mysql msdtc 不支持_MSDTC 服务意外地在 Windows Server 2012 或 Windows Server 2008 R2 SP1 中停止...
  17. 手写文本 matlab 识别,手写汉字识别matlab
  18. PPT打开显示找不到 ppcore.dll,无法打开 PPT
  19. 选取最优模型--scikit-learn的Python中抽查回归机器学习算法
  20. Visio画图几个技巧

热门文章

  1. 高通SDM450 ADC读取电池驱动调试
  2. 麒麟SP1系统查看网卡实时网速和网卡速率
  3. 小白学习应用构建分享-参照用法
  4. UIWebView和WKWebView的使用及js交互
  5. BuildRun低代码开发教程八节 | 图表和仪表盘展示
  6. 怪物猎人rise太刀笔记
  7. 函数的得墨忒耳法则(转)
  8. linux git源代码安装,linux下从源代码安装git
  9. 5月31日服务器维护更新公告,绝地求生5月31日更新内容
  10. 用Excel把一列数据转变成一行,并用逗号隔开