subversion dev

~ ~slow it down~ ~

目标:弄清楚subversion的模块,封装一个win32/unix的subversion client, 提供checkout,update接口 

 

svn: 版本管理工具,官网:http://subversion.apache.org/  

工程下载:http://subversion.tigris.org/servlets/ProjectDocumentView?documentID=41046&showInfo=true (找这个工程文件找了很久,太不人性化了)

 

 

subversion封装的库:

Repository layer:libsvn_fs,libsvn_fs_base,libsvn_fs_fs,libsvn_repos 

repository access layer:   libsvn_ra,   libsvn_ra_neon,   libsvn_ra_local,   libsvn_ra_serf,   libsvn_ra_svn 

client layer :libsvn_wc,livsvn_client

 

 

/********************************************/

win32 下开发 simple subversion client ,参考svn.exe,根据libsvn_client库封装一个简单的客户端

开发工具:vs2005

操作系统:windows xp(windows 7下有问题)

svn版本:1.6.16

/********************************************/

//////////////////////////////

 参考资料:svn.exe

1,download builder project:

http://subversion.tigris.org/servlets/ProjectDocumentView?documentID=41046&showInfo=true

 

2,编译svn客户端的错误修复

 

 

a,主要是通过查看subversion_vcnet.sln和它关联的vcproj的内容来补齐工程。

解决方法:出来不少错误,zlib nmake 找不到文件之类的。通过查看zlib的vcproj的内容(用记事本打开zlib.vcproj), 发现zlib工程下的c文件都是关联在c盘的绝对路径下的。

方案1,把svn-builder解压到c盘根目录下,编译通过。

方案2,修改所有的vcproj下的c文件的目录,改成相对路径. 

b,error prj0019 工具从 正在执行自定义生成步骤的错误,查看错误,是Python命令识别不了

解决方法:安装python2.x的版本,同时添加到环境变量,重启电脑。

 

编译通过后,运行svn.exe,把需要的dll放在同一个目录下

 

可能的问题:

安装vs2005 补丁。
http://www.microsoft.com/downloads/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2

s/system32/test.exe”的激活上下文生成失败。 找不到从属程序集 Microsoft.VC80.MFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。 请使用 sxstrace.exe 进行详细诊断。

出现这类问题,是由于VC2005编译出来的程序文件,采用了manifest方式来指定dll文件。对于win98、win2000系统,把exe文件和VC的 dll连接库放到一起就成了。对于winxp、win2003系统就要麻烦的多了,VC的连接库默认是被放到了winsxs目录下。

解决办法就是:使用vcredist_x86.exe再次分发程序。重启。

///////////////////////////////////////////////////////////////////////////////

具体的开发:

1,minimal_client.c的实现。

把需要的关联库拷贝在deps文件夹下。并在文件头加入以下链接:


#include "../deps/svnClient/include/svn_client.h"
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_client//svn_client-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_wc//svn_wc-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_ra//svn_ra-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_delta//svn_delta-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_diff//svn_diff-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_ra_local//libsvn_ra_local-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_ra_svn//libsvn_ra_svn-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_ra_neon//libsvn_ra_neon-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_repos//svn_repos-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_fs//svn_fs-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_fs_base//libsvn_fs_base-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_fs_fs//libsvn_fs_fs-1.lib")
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_fs_util//libsvn_fs_util-1.lib")


#include "../deps/svnClient/include/svn_cmdline.h"
#pragma comment(lib, "..//deps//svnClient//debug//libsvn_subr//svn_subr-1.lib")

#pragma comment(lib, "..//deps//apr//Debug//libapr-1.lib")
#pragma comment(lib, "..//deps//apr-iconv//Debug//libapriconv-1.lib")
#pragma comment(lib, "..//deps//apr-util//Debug//libaprutil-1.lib")
#pragma comment(lib, "..//deps//apr-util//xml//expat//lib//LibD//xml.lib")
#pragma comment(lib, "..//deps//zlib//debug//zlib.lib")
#pragma comment(lib, "..//deps//svn-libintl//lib//intl3_svn.lib")
#pragma comment(lib, "..//deps//neon//libneonD.lib")
#pragma comment(lib, "..//deps//sqlite3//lib//sqlite3.lib")
#pragma comment(lib, "..//deps//db4-win32//lib//libdb44d.lib")

#pragma comment(lib, "ws2_32.lib")

 

使用:文件运行的时候加一个url参数(可以在cmd里,也可以在vs2005里加),显示此url下的文件架构。本来以为只要包含一个svn_client lib库就够了。结果要那么多关联库。

 

 2,checkout,update的实现

http://linuxdevcenter.com/pub/a/linux/2003/04/24/libsvn1.html?page=2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/********************************************/

unix : subversion client

 

related url:

gcc的一些帮助。链接动态库和运行的时候着实花了一些时间。花时间看看gcc的基础知识。

http://www.iteye.com/topic/261176

http://blog.csdn.net/absurd/archive/2006/02/07/593899.aspx

/********************************************/

 

 

cc mini_client.c -o minimal_client  -I/usr/local/include/subversion-1 -I/usr/local/apr/include/apr-1   -L/usr/local/apr/lib -L/usr/local/lib   -lsvn_client-1 -lapr-1 -laprutil-1

 

 

 

 

 

 

 

 

 subversion dev_第1张图片

 ///////////////////////

下面的内容太乱了,等写好后整理。

 

/////////////////////////////////////////////////////////////////////////////////////////////////

win32 build subversion from source code

 

http://rocksun.cn/?p=103

http://www.windameister.org/blog/category/programming/svn-programming/

 

http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f726678b86462083c809d5331b564711befb723f405a8e90613652e91e09b7b07d6f75437de2db9bd71586e7c7356ad37b35704ad1050fc75cf28b102a8173d201bfee5dbbadf043d6f58e85821112&p=c377c815d9c043a504abc92d021083&user=baidu&fm=sc&query=rapidsvn+windows&qid=81277d2c01341c37&p1=9

http://www.baidu.com/s?bs=rapidsvn&f=8&wd=rapidsvn+windows

 

 

 

1,下载源代码和关联库:

http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=260&expandFolder=74

 

 

 2, install.txt , 关联库apr, apr-util, and neon 在deps文件夹里

     必须要安装的关联库:

 

win32 make命令:

Makefile.msc是在windows环境下采用微软编译器(vc6.0、VS2008等)的make文件,列出了4种编译方法:
# Usage:
    nmake -f win32/Makefile.msc                                                    (standard build)
    nmake -f win32/Makefile.msc LOC=-DFOO                                (nonstandard build)
    nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" /
                OBJA="inffas32.obj match686.obj"                              (use ASM code, x86)
    nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF" /
                OBJA="inffasx64.obj gvmat64.obj inffas8664.c"    (use ASM code, x64)

 

 

 

apr, apr-util, apr-iconv:直接用vs2005release编译

zlib:

1,修改makefile.msc, objs 添加inffast.obj
http://www.cppblog.com/fwxjj/archive/2010/09/26/127733.html

 

2, nmake -f win32/Makefile.msc

 

sqlit

 

neon: nmake -f neon.mak

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////

win32 client install

1,必须的关联库:apr, neon, zlib,把deps解压到subversion目录下。

2,cleanup, 防止以前旧版本的apr, zlib库section II.B

3, ./config --with-apr= --with-apr-util=

 

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////

unix server

 

1, 装好所有关联库

2,install

  $ ./configure
          $ make
          # make install

3,build

 

/////////////////////////////////////////////////////////////////////////////////////////////////

unix client

 

1, cleanup


          # rm -f /usr/local/lib/libsvn*
          # rm -f /usr/local/lib/libapr*
          # rm -f /usr/local/lib/libexpat*
          # rm -f /usr/local/lib/libneon*

 

 2, 查看所有关联库是否已存在

$ sh ./autogen.sh

 

3,

        $ ./configure
          $ make
          # make install

 

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////

 unix下如何开发subversion

 

1,build enviroment,在http://subversion.apache.org/docs/community-guide/building.html 下载makefile.svn文件。

 

用makefile.svn在一个什么都没装的unix上启动。它主要是通过Internet来下载所有的关联库

 

makefile.svn的使用

创建一个文件夹$(SVN_DEV)来存放所有的东西。

   $(SVN_DEV)/prefix 目录下安装subversion的所有库和二进制文件

   $(SVN_DEV)/prefix/svn-trunk 包含最新的subversion的二进制文件

   $(SVN_DEV)/prefix/svn-trunk/bin 加到$path系统变量

 

$(SVN_DEV)/svn-trunk 存放makefile

`svn up` to pull the latest changes

`make` and `make install` to install the binaries in $(SVN_DEV)/prefix/svn-trunk.

如果要重新编译,<PACKAGE>-reset - reinstall
nuke:回到安装前的状态

 

2,configration/build system,在http://svn.apache.org/repos/asf/subversion/trunk   URL上存放的是最新的subversion的代码,用tortoise checkout的目录下的makefile.in文件

 

checkout根目录下:gen-make.py, build.conf俩文件生成build-outputs.mk,在makefile.in文件中被使用。

 

步骤:

   a, cleanup all old installed subversion libs

      创建一个/usr/local/cleanup.sh文件。

      #!/bin/sh

      # Take care of libs
      cd /usr/local/lib
      rm -f APRVARS
      rm -f libapr*
      rm -f libexpat*
      rm -f libneon*
      rm -f libsvn*

      # Take care of headers
      cd /usr/local/include
      rm -f apr*
      rm -f svn*
      rm -f neon/*

      # Take care of headers
      cd /usr/local/apache2/lib
      rm -f *

 

      # take care of execute

      cd /usr/local/bin

      rm svn*

 

 

   b, configuration

   $ ./autogen.sh
   $ ./configure OPTIONS

 

 

./gen-make.py build.conf 生成build-outputs.mk
   $ make
   $ make check
   $ make install

 

 

 

 

 

 

3,测试subversion/tests

 

输出format: (PASS | FAIL): (argv[0]) (argv[1]): (description)

For example,

  [sussman@newton:~] ./frobtest 2
  PASS: frobtest 2: frobnicating fragile data
  [sussman@newton:~]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(subversion dev)