blob
mark :1
data 157
#include <stdio.h>

int f(int x)
{
	int s = 0;
	while (x) {
		x >>= 1;
		s++;
	}
}

/*
 * A comment.
 */

int main ()
{
	printf("%d\n", f(15));
	return 0;
}

reset refs/tags/simple
commit refs/tags/simple
mark :2
author Thomas Rast <trast@student.ethz.ch> 1362044688 +0100
committer Thomas Rast <trast@student.ethz.ch> 1362044688 +0100
data 8
initial
M 100644 :1 a.c

blob
mark :3
data 168
#include <stdio.h>

int f(int x)
{
	int s = 0;
	while (x) {
		x >>= 1;
		s++;
	}
	return s;
}

/*
 * A comment.
 */

int main ()
{
	printf("%d\n", f(15));
	return 0;
}

commit refs/tags/simple
mark :4
author Thomas Rast <trast@student.ethz.ch> 1362044695 +0100
committer Thomas Rast <trast@student.ethz.ch> 1362044695 +0100
data 11
change f()
from :2
M 100644 :3 a.c

blob
mark :5
data 171
#include <stdio.h>

long f(long x)
{
	int s = 0;
	while (x) {
		x >>= 1;
		s++;
	}
	return s;
}

/*
 * A comment.
 */

int main ()
{
	printf("%ld\n", f(15));
	return 0;
}

commit refs/tags/simple
mark :6
author Thomas Rast <trast@student.ethz.ch> 1362044716 +0100
committer Thomas Rast <trast@student.ethz.ch> 1362044716 +0100
data 21
touch both functions
from :4
M 100644 :5 a.c

blob
mark :7
data 185
#include <stdio.h>

long f(long x)
{
	int s = 0;
	while (x) {
		x >>= 1;
		s++;
	}
	return s;
}

/*
 * This is only an example!
 */

int main ()
{
	printf("%ld\n", f(15));
	return 0;
}

commit refs/tags/simple
mark :8
author Thomas Rast <trast@student.ethz.ch> 1362044741 +0100
committer Thomas Rast <trast@student.ethz.ch> 1362044741 +0100
data 14
touch comment
from :6
M 100644 :7 a.c

blob
mark :9
data 205
#include <unistd.h>
#include <stdio.h>

long f(long x)
{
	int s = 0;
	while (x) {
		x >>= 1;
		s++;
	}
	return s;
}

/*
 * This is only an example!
 */

int main ()
{
	printf("%ld\n", f(15));
	return 0;
}

commit refs/tags/simple
mark :10
author Thomas Rast <trast@student.ethz.ch> 1362044860 +0100
committer Thomas Rast <trast@student.ethz.ch> 1362044860 +0100
data 25
change at very beginning
from :8
M 100644 :9 a.c

blob
mark :11
data 204
#include <unistd.h>
#include <stdio.h>

long f(long x)
{
	int s = 0;
	while (x) {
		x >>= 1;
		s++;
	}
	return s;
}

/*
 * This is only an example!
 */

int main ()
{
	printf("%ld\n", f(15));
	return 0;
}
commit refs/tags/simple
mark :12
author Thomas Rast <trast@student.ethz.ch> 1362044890 +0100
committer Thomas Rast <trast@student.ethz.ch> 1362044890 +0100
data 36
change to an incomplete line at end
from :10
M 100644 :11 a.c

blob
mark :13
data 238
#include <unistd.h>
#include <stdio.h>

long f(long x)
{
	int s = 0;
	while (x) {
		x >>= 1;
		s++;
	}
	return s;
}

/*
 * This is only an example!
 */

int main ()
{
	printf("%ld\n", f(15));
	return 0;
}

/* incomplete lines are bad! */

commit refs/tags/simple
mark :14
author Thomas Rast <trast@student.ethz.ch> 1362044923 +0100
committer Thomas Rast <trast@student.ethz.ch> 1362044923 +0100
data 29
change back to complete line
from :12
M 100644 :13 a.c

commit refs/tags/move-support
mark :15
author Thomas Rast <trast@student.ethz.ch> 1362044968 +0100
committer Thomas Rast <trast@student.ethz.ch> 1362044968 +0100
data 10
move file
from :14
D a.c
M 100644 :13 b.c

blob
mark :16
data 237
#include <unistd.h>
#include <stdio.h>

long f(long x)
{
	int s = 0;
	while (x) {
		x /= 2;
		s++;
	}
	return s;
}

/*
 * This is only an example!
 */

int main ()
{
	printf("%ld\n", f(15));
	return 0;
}

/* incomplete lines are bad! */

commit refs/tags/move-support
mark :17
author Thomas Rast <trast@student.ethz.ch> 1362044990 +0100
committer Thomas Rast <trast@student.ethz.ch> 1362044990 +0100
data 22
another simple change
from :15
M 100644 :16 b.c

blob
mark :18
data 254
#include <unistd.h>
#include <stdio.h>

long f(long x);

/*
 * This is only an example!
 */

int main ()
{
	printf("%ld\n", f(15));
	return 0;
}

/* incomplete lines are bad! */

long f(long x)
{
	int s = 0;
	while (x) {
		x /= 2;
		s++;
	}
	return s;
}

commit refs/heads/main
mark :19
author Thomas Rast <trast@student.ethz.ch> 1362045024 +0100
committer Thomas Rast <trast@student.ethz.ch> 1362045024 +0100
data 21
move within the file
from :17
M 100644 :18 b.c

blob
mark :20
data 243
#include <unistd.h>
#include <stdio.h>

long f(long x)
{
	int s = 0;
	while (x) {
		x >>= 1;
		s++;
	}
	return s;
}

/*
 * This is only a short example!
 */

int main ()
{
	printf("%ld\n", f(15));
	return 0;
}

/* incomplete lines are bad! */

commit refs/heads/parallel-change
mark :21
author Thomas Rast <trast@inf.ethz.ch> 1365776157 +0200
committer Thomas Rast <trast@inf.ethz.ch> 1365776157 +0200
data 55
change on another line of history while rename happens
from :14
M 100644 :20 a.c

blob
mark :22
data 242
#include <unistd.h>
#include <stdio.h>

long f(long x)
{
	int s = 0;
	while (x) {
		x /= 2;
		s++;
	}
	return s;
}

/*
 * This is only a short example!
 */

int main ()
{
	printf("%ld\n", f(15));
	return 0;
}

/* incomplete lines are bad! */

commit refs/heads/parallel-change
mark :23
author Thomas Rast <trast@inf.ethz.ch> 1365776184 +0200
committer Thomas Rast <trast@inf.ethz.ch> 1365776191 +0200
data 24
Merge across the rename
from :21
merge :17
D a.c
M 100644 :22 b.c

reset refs/heads/parallel-change
from :23

