Ubuntu その4 「 curl と ftpのget と svn と WinMerge 」 | 乖離のぶろぐ(*´∀`)吸い込んで応援
(゚ω゚) ftpアプリには、curlが使えそうだ。

http://okwave.jp/qa/q4680263.html
struct FtpInfo{
const char *fname;
FILE *stream;
};

size_t ftpWriteFunc(void *buf, size_t size, size_t nmemb, void *stream)
{
struct FtpInfo *f;
f = (struct FtpInfo *)stream;

if(f && !f->stream){
f->stream = fopen(f->fname, "wb");
if(!f->stream){
return(-1);
}
}
return(fwrite(buf, size, nmemb, f->stream));
}

CURL *c;
struct FtpInfo f;
f.stream = NULL;
/* 初期処理 */
curl_global_init(CURL_GLOBAL_DEFAULT);
c = curl_easy_init();

/* 詳細表示 */
curl_easy_setopt(c, CURLOPT_VERBOSE, 1);

/* 設定 */
sprintf(buf, "%s:%s", username, password);
curl_easy_setopt(c, CURLOPT_USERPWD, buf);
sprintf(buf, "ftp://%s/%s/%s", servername, filepath, filename);
curl_easy_setopt(c, CURLOPT_URL, buf);
curl_easy_setopt(c, CURLOPT_WRITEFUNCTION, ftpWriteFunc);
curl_easy_setopt(c, CURLOPT_WRITEDATA, &f);

/* FTPでデータ取得 */
cret = curl_easy_perform(c);

/* 終了処理 */
curl_easy_cleanup(c);


(゚ω゚)プロジェクトftpを右クリックし、パスのマップを編集する。

ビルド・ホストを設定~パスのマップを編集
$乖離のぶろぐ(*´∀`)吸い込んで応援

curlのインストール後
$乖離のぶろぐ(*´∀`)吸い込んで応援


(゚ω゚)main.cppをコンパイルしたら、インクルードが入ってない事に気づく。

mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
g++ -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp
main.cpp:10:23: 致命的エラー: curl/curl.h: そのようなファイルやディレクトリはありません
コンパイルを停止しました。
make: *** [build/Debug/GNU-Linux-x86/main.o] エラー 1


(゚ω゚) curlのインストールって、何をどうするの?
http://curl.haxx.se/docs/install.html
UNIX
====
A normal unix installation is made in three or four steps (after you've
unpacked the source archive):

./configure
make
make test (optional)
make install


You probably need to be root when doing the last command.


(゚ω゚)rootでやれっていうことか。手順は分かった。後は、なにが足りないの?
http://curl.haxx.se/download.html
http://packages.ubuntu.com/raring/curl
curl ソースパッケージをダウンロード:

[curl_7.29.0-1ubuntu1.dsc]
[curl_7.29.0.orig.tar.gz]
[curl_7.29.0-1ubuntu1.debian.tar.gz]


(゚ω゚)curl_7.29.0.orig.tar.gzを取得、解凍。
$乖離のぶろぐ(*´∀`)吸い込んで応援


(゚ω゚)make testしてたらSSHサーバーが無いとか指摘されてた。
(゚ω゚)インクルードはここらしい。プロジェクトの設定が必要だ。
$乖離のぶろぐ(*´∀`)吸い込んで応援

(゚ω゚)ライブラリはここに作られていた。

pochifx@ubuntu64:~$ ls -la /usr/local/lib
合計 1180
drwxr-xr-x 4 root root 4096 3月 9 16:00 .
drwxr-xr-x 10 root root 4096 3月 8 20:03 ..
-rw-r--r-- 1 root root 772718 3月 9 16:00 libcurl.a
-rwxr-xr-x 1 root root 965 3月 9 16:00 libcurl.la
lrwxrwxrwx 1 root root 16 3月 9 16:00 libcurl.so -> libcurl.so.4.3.0
lrwxrwxrwx 1 root root 16 3月 9 16:00 libcurl.so.4 -> libcurl.so.4.3.0
-rwxr-xr-x 1 root root 411473 3月 9 16:00 libcurl.so.4.3.0
drwxr-xr-x 2 root root 4096 3月 9 16:00 pkgconfig
drwxrwsr-x 4 root staff 4096 3月 8 20:03 python2.7


ライブラリのオプションを追加 -lcurl
$乖離のぶろぐ(*´∀`)吸い込んで応援

svnとNetBeans。履歴の差分
$乖離のぶろぐ(*´∀`)吸い込んで応援

(゚ω゚)rootで打ったコマンドを書いておく。

(゚ω゚)参考URL。

http://wikiwiki.jp/pman10/?Subversion%A5%E1%A5%E2%A1%A7SVNPath%A4%C8SVNParentPath
SVNParentPath Edit
複数のリポジトリがある場合、その親ディレクトリを指定する。
プロジェクトが複数あり、個々にリビジョンを管理する場合はこれが望ましい。

http://www.caldron.jp/~nabetaro/svn/svnbook-1.4-final/svn.ref.svnadmin.c.create.html
svnadmin create
前のページ svnadmin のサブコマンド 次のページ
名前

svnadmin create — 新規に空のリポジトリを作成します。
書式

svnadmin create REPOS_PATH

説明

指定したパスに新規に空のリポジトリを作ります。パスが存在しなければ自動的に作成します。[59] Subversion 1.2 では、svnadmin はデフォルトで fsfs ファイルシステムバックエンドで新しいリポジトリを作成します。


(゚ω゚) リビジョン管理されているsvnディレクトリ内に、
(゚ω゚) cという新規の空リポジトリを作ります。という意味。

svnadmin create /home/pochifx/public/svn/c

cd /home/pochifx/public/svn/c
chown -R www-data:www-data . .*

(゚ω゚) こんな感じに仕上がっている。
root@ubuntu64:/home/pochifx/public/svn/c# ls -l
合計 28
-rw-r--r-- 1 www-data www-data 229 3月 9 17:18 README.txt
drwxr-xr-x 2 www-data www-data 4096 3月 9 17:18 conf
drwxr-xr-x 3 www-data www-data 4096 3月 9 17:42 dav
drwxr-sr-x 6 www-data www-data 4096 3月 9 17:43 db
-r--r--r-- 1 www-data www-data 2 3月 9 17:18 format
drwxr-xr-x 2 www-data www-data 4096 3月 9 17:18 hooks
drwxr-xr-x 2 www-data www-data 4096 3月 9 17:18 locks
root@ubuntu64:/home/pochifx/public/svn/c# ls -ltR
.:
合計 28
drwxr-sr-x 6 www-data www-data 4096 3月 9 17:43 db
drwxr-xr-x 3 www-data www-data 4096 3月 9 17:42 dav
-r--r--r-- 1 www-data www-data 2 3月 9 17:18 format
-rw-r--r-- 1 www-data www-data 229 3月 9 17:18 README.txt
drwxr-xr-x 2 www-data www-data 4096 3月 9 17:18 conf
drwxr-xr-x 2 www-data www-data 4096 3月 9 17:18 hooks
drwxr-xr-x 2 www-data www-data 4096 3月 9 17:18 locks

./db:
合計 48
-rw-r--r-- 1 www-data www-data 4096 3月 9 17:43 rep-cache.db
-rw-r--r-- 1 www-data www-data 2 3月 9 17:43 current
drwxr-sr-x 2 www-data www-data 4096 3月 9 17:43 transactions
drwxr-sr-x 2 www-data www-data 4096 3月 9 17:43 txn-protorevs
-rw-r--r-- 1 www-data www-data 2 3月 9 17:43 txn-current
-r--r--r-- 1 www-data www-data 22 3月 9 17:18 format
-rw-r--r-- 1 www-data www-data 1920 3月 9 17:18 fsfs.conf
-rw-r--r-- 1 www-data www-data 2 3月 9 17:18 min-unpacked-rev
-rw-r--r-- 1 www-data www-data 0 3月 9 17:18 txn-current-lock
-rw-r--r-- 1 www-data www-data 5 3月 9 17:18 fs-type
drwxr-sr-x 3 www-data www-data 4096 3月 9 17:18 revprops
drwxr-sr-x 3 www-data www-data 4096 3月 9 17:18 revs
-rw-r--r-- 1 www-data www-data 37 3月 9 17:18 uuid
-rw-r--r-- 1 www-data www-data 0 3月 9 17:18 write-lock

./db/transactions:
合計 0

./db/txn-protorevs:
合計 0

./db/revprops:
合計 4
drwxr-sr-x 2 www-data www-data 4096 3月 9 17:43 0

./db/revprops/0:
合計 16
-r--r--r-- 1 www-data www-data 80 3月 9 17:43 3
-r--r--r-- 1 www-data www-data 80 3月 9 17:42 2
-r--r--r-- 1 www-data www-data 80 3月 9 17:42 1
-r--r--r-- 1 www-data www-data 50 3月 9 17:18 0

./db/revs:
合計 4
drwxr-sr-x 2 www-data www-data 4096 3月 9 17:43 0

./db/revs/0:
合計 40
-r--r--r-- 1 www-data www-data 897 3月 9 17:43 3
-r--r--r-- 1 www-data www-data 25161 3月 9 17:42 2
-r--r--r-- 1 www-data www-data 275 3月 9 17:42 1
-r--r--r-- 1 www-data www-data 115 3月 9 17:18 0

./dav:
合計 4
drwxr-xr-x 2 www-data www-data 4096 3月 9 17:43 activities.d

./dav/activities.d:
合計 0

./conf:
合計 12
-rw-r--r-- 1 www-data www-data 1080 3月 9 17:18 authz
-rw-r--r-- 1 www-data www-data 309 3月 9 17:18 passwd
-rw-r--r-- 1 www-data www-data 2279 3月 9 17:18 svnserve.conf

./hooks:
合計 36
-rw-r--r-- 1 www-data www-data 2022 3月 9 17:18 post-commit.tmpl
-rw-r--r-- 1 www-data www-data 1663 3月 9 17:18 post-lock.tmpl
-rw-r--r-- 1 www-data www-data 2344 3月 9 17:18 post-revprop-change.tmpl
-rw-r--r-- 1 www-data www-data 1592 3月 9 17:18 post-unlock.tmpl
-rw-r--r-- 1 www-data www-data 3510 3月 9 17:18 pre-commit.tmpl
-rw-r--r-- 1 www-data www-data 2410 3月 9 17:18 pre-lock.tmpl
-rw-r--r-- 1 www-data www-data 2818 3月 9 17:18 pre-revprop-change.tmpl
-rw-r--r-- 1 www-data www-data 2100 3月 9 17:18 pre-unlock.tmpl
-rw-r--r-- 1 www-data www-data 2852 3月 9 17:18 start-commit.tmpl

./locks:
合計 8
-rw-r--r-- 1 www-data www-data 139 3月 9 17:18 db-logs.lock
-rw-r--r-- 1 www-data www-data 139 3月 9 17:18 db.lock



svnもdiffはWinMergeが分かりやすい
$乖離のぶろぐ(*´∀`)吸い込んで応援


(゚ω゚)main関数を貼っておく。

/*
* File: main.cpp
* Author: pochifx
*
* Created on 2013/03/08, 22:19
*/
//#include<string>
//#include<iostream>
#include <cstdlib>
#include <curl/curl.h>

using namespace std;

struct FtpInfo {
const char *fname;
FILE *stream;
};

size_t ftpWriteFunc(char *ptr, size_t size, size_t nmemb, void *userdata) {
#if 1
struct FtpInfo *f;
f = (struct FtpInfo *) userdata;

if (f && !f->stream) {
f->stream = fopen(f->fname, "wb");
if (!f->stream) {
return (-1);
}
}
return (fwrite(ptr, size, nmemb, f->stream));
#endif
#if 0
int realsize = size * nmemb;
stream->append((char *)buf, realsize);
return realsize;
#endif

}

int main(int argc, char** argv) {
char *username = argv[1]; // ftpサーバーのユーザー名
char *password = argv[2]; // ftpサーバーのユーザーのパスワード
char *servername = argv[3];// ftpサーバー名 (IPアドレス)
char *filepath = argv[4]; // リモートのディレクトリのフルパス
char *filename = argv[5]; // filepathに置いてあるgetするファイル名

char buf[256];
CURL *c;
struct FtpInfo f;
f.stream = NULL;
/* 初期処理 */
curl_global_init(CURL_GLOBAL_DEFAULT);
c = curl_easy_init();

/* 詳細表示 */
curl_easy_setopt(c, CURLOPT_VERBOSE, 1);

/* 設定 */
sprintf(buf, "%s:%s", username, password);
curl_easy_setopt(c, CURLOPT_USERPWD, buf);
sprintf(buf, "ftp://%s/%s/%s", servername, filepath, filename);
curl_easy_setopt(c, CURLOPT_URL, buf);

f.fname = filename;
curl_easy_setopt(c, CURLOPT_WRITEDATA, &f);
curl_easy_setopt(c, CURLOPT_WRITEFUNCTION, ftpWriteFunc);

/* FTPでデータ取得 */
CURLcode cret = curl_easy_perform(c);
if (cret != 0) {
printf("curl_easy_perform error : cret=%d\n", cret);
}
/* 終了処理 */
curl_easy_cleanup(c);

return 0;
}




(゚ω゚)svnからチェックアウトしてビルドするとパーミッションが無いようなエラーが起こり、
(゚ω゚)ビルド途中で止まる。chmod -R 777 . すれば直るっぽい。

root@ubuntu64:/home/pochifx/public/NetBeansProjects# chmod -R 777 .
root@ubuntu64:/home/pochifx/public/NetBeansProjects# ls -la
合計 12
drwxrwxrwx 3 pochifx pochifx 4096 3月 9 22:56 .
drwxrwxrwx 5 pochifx pochifx 4096 3月 9 22:43 ..
drwxrwxrwx 6 nobody nogroup 4096 3月 9 22:56 ftp
root@ubuntu64:/home/pochifx/public/NetBeansProjects# cd ftp
root@ubuntu64:/home/pochifx/public/NetBeansProjects/ftp# ls -la
合計 40
drwxrwxrwx 6 nobody nogroup 4096 3月 9 23:30 .
drwxrwxrwx 3 pochifx pochifx 4096 3月 9 22:56 ..
-rw-rw-r-- 1 pochifx pochifx 144 3月 9 23:30 .dep.inc
drwxrwxrwx 4 nobody nogroup 4096 3月 9 23:26 .svn
-rwxrwxrwx 1 nobody nogroup 3482 3月 9 22:56 Makefile
-rw-rw-r-- 1 pochifx pochifx 2569 3月 9 23:31 aaa
drwxrwxrwx 3 nobody nogroup 4096 3月 9 23:30 build
drwxrwxrwx 3 nobody nogroup 4096 3月 9 22:56 dist
-rwxrwxrwx 1 nobody nogroup 2050 3月 9 22:56 main.cpp
drwxrwxrwx 3 nobody nogroup 4096 3月 9 22:56 nbproject
root@ubuntu64:/home/pochifx/public/NetBeansProjects/ftp#


(゚ω゚) aaaっていうファイルが、/tmp/aaa から、ftpによってgetされたファイル。
$乖離のぶろぐ(*´∀`)吸い込んで応援