Refuses to do so if the left hand side of the diff has different amount of differing lines to the right hand side to avoid confusion. Note that I use the naive dynamic programming approach for calculating the longest common subsequence. We could probably be more efficient by using a better algorithm. The LCS calculating function is O(n*m) and uses up n*m amount of memory too (so if we we compare two strings of length 100, I use an array of 10000 for calculating the LCS). Might want to not calculate LCS if the length of the line is too large. Signed-off-by: Ragnar Ouchterlony <ragnar@lysator.liu.se>
		
			
				
	
	
		
			702 خطوط
		
	
	
		
			9.2 KiB
		
	
	
	
		
			CSS
		
	
	
	
	
	
			
		
		
	
	
			702 خطوط
		
	
	
		
			9.2 KiB
		
	
	
	
		
			CSS
		
	
	
	
	
	
body, table, form {
 | 
						|
	padding: 0em;
 | 
						|
	margin: 0em;
 | 
						|
}
 | 
						|
 | 
						|
body {
 | 
						|
	font-family: sans-serif;
 | 
						|
	font-size: 10pt;
 | 
						|
	color: #333;
 | 
						|
	background: white;
 | 
						|
	padding: 4px;
 | 
						|
}
 | 
						|
 | 
						|
a {
 | 
						|
	color: blue;
 | 
						|
	text-decoration: none;
 | 
						|
}
 | 
						|
 | 
						|
a:hover {
 | 
						|
	text-decoration: underline;
 | 
						|
}
 | 
						|
 | 
						|
table {
 | 
						|
      border-collapse: collapse;
 | 
						|
}
 | 
						|
 | 
						|
table#header {
 | 
						|
	width: 100%;
 | 
						|
	margin-bottom: 1em;
 | 
						|
}
 | 
						|
 | 
						|
table#header td.logo {
 | 
						|
	width: 96px;
 | 
						|
}
 | 
						|
 | 
						|
table#header td.main {
 | 
						|
	font-size: 250%;
 | 
						|
	padding-left: 10px;
 | 
						|
	white-space: nowrap;
 | 
						|
}
 | 
						|
 | 
						|
table#header td.main a {
 | 
						|
	color: #000;
 | 
						|
}
 | 
						|
 | 
						|
table#header td.form {
 | 
						|
	text-align: right;
 | 
						|
	vertical-align: bottom;
 | 
						|
	padding-right: 1em;
 | 
						|
	padding-bottom: 2px;
 | 
						|
	white-space: nowrap;
 | 
						|
}
 | 
						|
 | 
						|
table#header td.form form,
 | 
						|
table#header td.form input,
 | 
						|
table#header td.form select {
 | 
						|
	font-size: 90%;
 | 
						|
}
 | 
						|
 | 
						|
table#header td.sub {
 | 
						|
	color: #777;
 | 
						|
	border-top: solid 1px #ccc;
 | 
						|
	padding-left: 10px;
 | 
						|
}
 | 
						|
 | 
						|
table.tabs {
 | 
						|
	/* border-bottom: solid 2px #ccc; */
 | 
						|
	border-collapse: collapse;
 | 
						|
	margin-top: 2em;
 | 
						|
	margin-bottom: 0px;
 | 
						|
	width: 100%;
 | 
						|
}
 | 
						|
 | 
						|
table.tabs td {
 | 
						|
	padding: 0px 1em;
 | 
						|
	vertical-align: bottom;
 | 
						|
}
 | 
						|
 | 
						|
table.tabs td a {
 | 
						|
	padding: 2px 0.75em;
 | 
						|
	color: #777;
 | 
						|
	font-size: 110%;
 | 
						|
}
 | 
						|
 | 
						|
table.tabs td a.active {
 | 
						|
	color: #000;
 | 
						|
	background-color: #ccc;
 | 
						|
}
 | 
						|
 | 
						|
table.tabs td.form {
 | 
						|
	text-align: right;
 | 
						|
}
 | 
						|
 | 
						|
table.tabs td.form form {
 | 
						|
	padding-bottom: 2px;
 | 
						|
	font-size: 90%;
 | 
						|
	white-space: nowrap;
 | 
						|
}
 | 
						|
 | 
						|
table.tabs td.form input,
 | 
						|
table.tabs td.form select {
 | 
						|
	font-size: 90%;
 | 
						|
}
 | 
						|
 | 
						|
div.content {
 | 
						|
	margin: 0px;
 | 
						|
	padding: 2em;
 | 
						|
	border-top: solid 3px #ccc;
 | 
						|
	border-bottom: solid 3px #ccc;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
table.list {
 | 
						|
	width: 100%;
 | 
						|
	border: none;
 | 
						|
	border-collapse: collapse;
 | 
						|
}
 | 
						|
 | 
						|
table.list tr {
 | 
						|
	background: white;
 | 
						|
}
 | 
						|
 | 
						|
table.list tr.logheader {
 | 
						|
	background: #eee;
 | 
						|
}
 | 
						|
 | 
						|
table.list tr:hover {
 | 
						|
	background: #eee;
 | 
						|
}
 | 
						|
 | 
						|
table.list tr.nohover:hover {
 | 
						|
	background: white;
 | 
						|
}
 | 
						|
 | 
						|
table.list th {
 | 
						|
	font-weight: bold;
 | 
						|
	/* color: #888;
 | 
						|
	border-top: dashed 1px #888;
 | 
						|
	border-bottom: dashed 1px #888;
 | 
						|
	*/
 | 
						|
	padding: 0.1em 0.5em 0.05em 0.5em;
 | 
						|
	vertical-align: baseline;
 | 
						|
}
 | 
						|
 | 
						|
table.list td {
 | 
						|
	border: none;
 | 
						|
	padding: 0.1em 0.5em 0.1em 0.5em;
 | 
						|
}
 | 
						|
 | 
						|
table.list td.logsubject {
 | 
						|
	font-family: monospace;
 | 
						|
	font-weight: bold;
 | 
						|
}
 | 
						|
 | 
						|
table.list td.logmsg {
 | 
						|
	font-family: monospace;
 | 
						|
	white-space: pre;
 | 
						|
	padding: 1em 0.5em 2em 0.5em;
 | 
						|
}
 | 
						|
 | 
						|
table.list td a {
 | 
						|
	color: black;
 | 
						|
}
 | 
						|
 | 
						|
table.list td a:hover {
 | 
						|
	color: #00f;
 | 
						|
}
 | 
						|
 | 
						|
img {
 | 
						|
	border: none;
 | 
						|
}
 | 
						|
 | 
						|
input#switch-btn {
 | 
						|
	margin: 2px 0px 0px 0px;
 | 
						|
}
 | 
						|
 | 
						|
td#sidebar input.txt {
 | 
						|
	width: 100%;
 | 
						|
	margin: 2px 0px 0px 0px;
 | 
						|
}
 | 
						|
 | 
						|
table#grid {
 | 
						|
	margin: 0px;
 | 
						|
}
 | 
						|
 | 
						|
td#content {
 | 
						|
	vertical-align: top;
 | 
						|
	padding: 1em 2em 1em 1em;
 | 
						|
	border: none;
 | 
						|
}
 | 
						|
 | 
						|
div#summary {
 | 
						|
	vertical-align: top;
 | 
						|
	margin-bottom: 1em;
 | 
						|
}
 | 
						|
 | 
						|
table#downloads {
 | 
						|
	float: right;
 | 
						|
	border-collapse: collapse;
 | 
						|
	border: solid 1px #777;
 | 
						|
	margin-left: 0.5em;
 | 
						|
	margin-bottom: 0.5em;
 | 
						|
}
 | 
						|
 | 
						|
table#downloads th {
 | 
						|
	background-color: #ccc;
 | 
						|
}
 | 
						|
 | 
						|
div#blob {
 | 
						|
	border: solid 1px black;
 | 
						|
}
 | 
						|
 | 
						|
div.error {
 | 
						|
	color: red;
 | 
						|
	font-weight: bold;
 | 
						|
	margin: 1em 2em;
 | 
						|
}
 | 
						|
 | 
						|
a.ls-blob, a.ls-dir, a.ls-mod {
 | 
						|
	font-family: monospace;
 | 
						|
}
 | 
						|
 | 
						|
td.ls-size {
 | 
						|
	text-align: right;
 | 
						|
	font-family: monospace;
 | 
						|
	width: 10em;
 | 
						|
}
 | 
						|
 | 
						|
td.ls-mode {
 | 
						|
	font-family: monospace;
 | 
						|
	width: 10em;
 | 
						|
}
 | 
						|
 | 
						|
table.blob {
 | 
						|
	margin-top: 0.5em;
 | 
						|
	border-top: solid 1px black;
 | 
						|
}
 | 
						|
 | 
						|
table.blob td.lines {
 | 
						|
	margin: 0; padding: 0 0 0 0.5em;
 | 
						|
	vertical-align: top;
 | 
						|
	color: black;
 | 
						|
}
 | 
						|
 | 
						|
table.blob td.linenumbers {
 | 
						|
	margin: 0; padding: 0 0.5em 0 0.5em;
 | 
						|
	vertical-align: top;
 | 
						|
	text-align: right;
 | 
						|
	border-right: 1px solid gray;
 | 
						|
}
 | 
						|
 | 
						|
table.blob pre {
 | 
						|
	padding: 0; margin: 0;
 | 
						|
}
 | 
						|
 | 
						|
table.blob a.no {
 | 
						|
	color: gray;
 | 
						|
	text-align: right;
 | 
						|
	text-decoration: none;
 | 
						|
}
 | 
						|
 | 
						|
table.blob a.no a:hover {
 | 
						|
	color: black;
 | 
						|
}
 | 
						|
 | 
						|
table.bin-blob {
 | 
						|
	margin-top: 0.5em;
 | 
						|
	border: solid 1px black;
 | 
						|
}
 | 
						|
 | 
						|
table.bin-blob th {
 | 
						|
	font-family: monospace;
 | 
						|
	white-space: pre;
 | 
						|
	border: solid 1px #777;
 | 
						|
	padding: 0.5em 1em;
 | 
						|
}
 | 
						|
 | 
						|
table.bin-blob td {
 | 
						|
	font-family: monospace;
 | 
						|
	white-space: pre;
 | 
						|
	border-left: solid 1px #777;
 | 
						|
	padding: 0em 1em;
 | 
						|
}
 | 
						|
 | 
						|
table.nowrap td {
 | 
						|
	white-space: nowrap;
 | 
						|
}
 | 
						|
 | 
						|
table.commit-info {
 | 
						|
	border-collapse: collapse;
 | 
						|
	margin-top: 1.5em;
 | 
						|
}
 | 
						|
 | 
						|
table.commit-info th {
 | 
						|
	text-align: left;
 | 
						|
	font-weight: normal;
 | 
						|
	padding: 0.1em 1em 0.1em 0.1em;
 | 
						|
	vertical-align: top;
 | 
						|
}
 | 
						|
 | 
						|
table.commit-info td {
 | 
						|
	font-weight: normal;
 | 
						|
	padding: 0.1em 1em 0.1em 0.1em;
 | 
						|
}
 | 
						|
 | 
						|
div.commit-subject {
 | 
						|
	font-weight: bold;
 | 
						|
	font-size: 125%;
 | 
						|
	margin: 1.5em 0em 0.5em 0em;
 | 
						|
	padding: 0em;
 | 
						|
}
 | 
						|
 | 
						|
div.commit-msg {
 | 
						|
	white-space: pre;
 | 
						|
	font-family: monospace;
 | 
						|
}
 | 
						|
 | 
						|
div.diffstat-header {
 | 
						|
	font-weight: bold;
 | 
						|
	padding-top: 1.5em;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat {
 | 
						|
	border-collapse: collapse;
 | 
						|
	border: solid 1px #aaa;
 | 
						|
	background-color: #eee;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat th {
 | 
						|
	font-weight: normal;
 | 
						|
	text-align: left;
 | 
						|
	text-decoration: underline;
 | 
						|
	padding: 0.1em 1em 0.1em 0.1em;
 | 
						|
	font-size: 100%;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td {
 | 
						|
	padding: 0.2em 0.2em 0.1em 0.1em;
 | 
						|
	font-size: 100%;
 | 
						|
	border: none;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td.mode {
 | 
						|
	white-space: nowrap;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td span.modechange {
 | 
						|
	padding-left: 1em;
 | 
						|
	color: red;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td.add a {
 | 
						|
	color: green;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td.del a {
 | 
						|
	color: red;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td.upd a {
 | 
						|
	color: blue;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td.graph {
 | 
						|
	width: 500px;
 | 
						|
	vertical-align: middle;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td.graph table {
 | 
						|
	border: none;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td.graph td {
 | 
						|
	padding: 0px;
 | 
						|
	border: 0px;
 | 
						|
	height: 7pt;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td.graph td.add {
 | 
						|
	background-color: #5c5;
 | 
						|
}
 | 
						|
 | 
						|
table.diffstat td.graph td.rem {
 | 
						|
	background-color: #c55;
 | 
						|
}
 | 
						|
 | 
						|
div.diffstat-summary {
 | 
						|
	color: #888;
 | 
						|
	padding-top: 0.5em;
 | 
						|
}
 | 
						|
 | 
						|
table.diff {
 | 
						|
	width: 100%;
 | 
						|
}
 | 
						|
 | 
						|
table.diff td {
 | 
						|
	font-family: monospace;
 | 
						|
	white-space: pre;
 | 
						|
}
 | 
						|
 | 
						|
table.diff td div.head {
 | 
						|
	font-weight: bold;
 | 
						|
	margin-top: 1em;
 | 
						|
	color: black;
 | 
						|
}
 | 
						|
 | 
						|
table.diff td div.hunk {
 | 
						|
	color: #009;
 | 
						|
}
 | 
						|
 | 
						|
table.diff td div.add {
 | 
						|
	color: green;
 | 
						|
}
 | 
						|
 | 
						|
table.diff td div.del {
 | 
						|
	color: red;
 | 
						|
}
 | 
						|
 | 
						|
.sha1 {
 | 
						|
	font-family: monospace;
 | 
						|
	font-size: 90%;
 | 
						|
}
 | 
						|
 | 
						|
.left {
 | 
						|
	text-align: left;
 | 
						|
}
 | 
						|
 | 
						|
.right {
 | 
						|
	text-align: right;
 | 
						|
}
 | 
						|
 | 
						|
table.list td.reposection {
 | 
						|
	font-style: italic;
 | 
						|
	color: #888;
 | 
						|
}
 | 
						|
 | 
						|
a.button {
 | 
						|
	font-size: 80%;
 | 
						|
	padding: 0em 0.5em;
 | 
						|
}
 | 
						|
 | 
						|
a.primary {
 | 
						|
	font-size: 100%;
 | 
						|
}
 | 
						|
 | 
						|
a.secondary {
 | 
						|
	font-size: 90%;
 | 
						|
}
 | 
						|
 | 
						|
td.toplevel-repo {
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
table.list td.sublevel-repo {
 | 
						|
	padding-left: 1.5em;
 | 
						|
}
 | 
						|
 | 
						|
div.pager {
 | 
						|
	text-align: center;
 | 
						|
	margin: 1em 0em 0em 0em;
 | 
						|
}
 | 
						|
 | 
						|
div.pager a {
 | 
						|
	color: #777;
 | 
						|
	margin: 0em 0.5em;
 | 
						|
}
 | 
						|
 | 
						|
span.age-mins {
 | 
						|
	font-weight: bold;
 | 
						|
	color: #080;
 | 
						|
}
 | 
						|
 | 
						|
span.age-hours {
 | 
						|
	color: #080;
 | 
						|
}
 | 
						|
 | 
						|
span.age-days {
 | 
						|
	color: #040;
 | 
						|
}
 | 
						|
 | 
						|
span.age-weeks {
 | 
						|
	color: #444;
 | 
						|
}
 | 
						|
 | 
						|
span.age-months {
 | 
						|
	color: #888;
 | 
						|
}
 | 
						|
 | 
						|
span.age-years {
 | 
						|
	color: #bbb;
 | 
						|
}
 | 
						|
div.footer {
 | 
						|
	margin-top: 0.5em;
 | 
						|
	text-align: center;
 | 
						|
	font-size: 80%;
 | 
						|
	color: #ccc;
 | 
						|
}
 | 
						|
a.branch-deco {
 | 
						|
	margin: 0px 0.5em;
 | 
						|
	padding: 0px 0.25em;
 | 
						|
	background-color: #88ff88;
 | 
						|
	border: solid 1px #007700;
 | 
						|
}
 | 
						|
a.tag-deco {
 | 
						|
	margin: 0px 0.5em;
 | 
						|
	padding: 0px 0.25em;
 | 
						|
	background-color: #ffff88;
 | 
						|
	border: solid 1px #777700;
 | 
						|
}
 | 
						|
a.remote-deco {
 | 
						|
	margin: 0px 0.5em;
 | 
						|
	padding: 0px 0.25em;
 | 
						|
	background-color: #ccccff;
 | 
						|
	border: solid 1px #000077;
 | 
						|
}
 | 
						|
a.deco {
 | 
						|
	margin: 0px 0.5em;
 | 
						|
	padding: 0px 0.25em;
 | 
						|
	background-color: #ff8888;
 | 
						|
	border: solid 1px #770000;
 | 
						|
}
 | 
						|
 | 
						|
div.commit-subject a {
 | 
						|
	margin-left: 1em;
 | 
						|
	font-size: 75%;
 | 
						|
}
 | 
						|
 | 
						|
table.stats {
 | 
						|
	border: solid 1px black;
 | 
						|
	border-collapse: collapse;
 | 
						|
}
 | 
						|
 | 
						|
table.stats th {
 | 
						|
	text-align: left;
 | 
						|
	padding: 1px 0.5em;
 | 
						|
	background-color: #eee;
 | 
						|
	border: solid 1px black;
 | 
						|
}
 | 
						|
 | 
						|
table.stats td {
 | 
						|
	text-align: right;
 | 
						|
	padding: 1px 0.5em;
 | 
						|
	border: solid 1px black;
 | 
						|
}
 | 
						|
 | 
						|
table.stats td.total {
 | 
						|
	font-weight: bold;
 | 
						|
	text-align: left;
 | 
						|
}
 | 
						|
 | 
						|
table.stats td.sum {
 | 
						|
	color: #c00;
 | 
						|
	font-weight: bold;
 | 
						|
/*	background-color: #eee; */
 | 
						|
}
 | 
						|
 | 
						|
table.stats td.left {
 | 
						|
	text-align: left;
 | 
						|
}
 | 
						|
 | 
						|
table.vgraph {
 | 
						|
	border-collapse: separate;
 | 
						|
	border: solid 1px black;
 | 
						|
	height: 200px;
 | 
						|
}
 | 
						|
 | 
						|
table.vgraph th {
 | 
						|
	background-color: #eee;
 | 
						|
	font-weight: bold;
 | 
						|
	border: solid 1px white;
 | 
						|
	padding: 1px 0.5em;
 | 
						|
}
 | 
						|
 | 
						|
table.vgraph td {
 | 
						|
	vertical-align: bottom;
 | 
						|
	padding: 0px 10px;
 | 
						|
}
 | 
						|
 | 
						|
table.vgraph div.bar {
 | 
						|
	background-color: #eee;
 | 
						|
}
 | 
						|
 | 
						|
table.hgraph {
 | 
						|
	border: solid 1px black;
 | 
						|
	width: 800px;
 | 
						|
}
 | 
						|
 | 
						|
table.hgraph th {
 | 
						|
	background-color: #eee;
 | 
						|
	font-weight: bold;
 | 
						|
	border: solid 1px black;
 | 
						|
	padding: 1px 0.5em;
 | 
						|
}
 | 
						|
 | 
						|
table.hgraph td {
 | 
						|
	vertical-align: center;
 | 
						|
	padding: 2px 2px;
 | 
						|
}
 | 
						|
 | 
						|
table.hgraph div.bar {
 | 
						|
	background-color: #eee;
 | 
						|
	height: 1em;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff {
 | 
						|
	width: 100%;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td {
 | 
						|
	font-size: 75%;
 | 
						|
	font-family: monospace;
 | 
						|
	white-space: pre;
 | 
						|
	padding: 1px 4px 1px 4px;
 | 
						|
	border-left: solid 1px #aaa;
 | 
						|
	border-right: solid 1px #aaa;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.add {
 | 
						|
	color: black;
 | 
						|
	background: #cfc;
 | 
						|
	min-width: 50%;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.add_dark {
 | 
						|
	color: black;
 | 
						|
	background: #aca;
 | 
						|
	min-width: 50%;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff span.add {
 | 
						|
	background: #cfc;
 | 
						|
	font-weight: bold;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.del {
 | 
						|
	color: black;
 | 
						|
	background: #fcc;
 | 
						|
	min-width: 50%;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.del_dark {
 | 
						|
	color: black;
 | 
						|
	background: #caa;
 | 
						|
	min-width: 50%;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff span.del {
 | 
						|
	background: #fcc;
 | 
						|
	font-weight: bold;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.changed {
 | 
						|
	color: black;
 | 
						|
	background: #ffc;
 | 
						|
	min-width: 50%;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.changed_dark {
 | 
						|
	color: black;
 | 
						|
	background: #cca;
 | 
						|
	min-width: 50%;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.lineno {
 | 
						|
	color: black;
 | 
						|
	background: #eee;
 | 
						|
	text-align: right;
 | 
						|
	width: 3em;
 | 
						|
	min-width: 3em;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.hunk {
 | 
						|
	color: #black;
 | 
						|
	background: #ccf;
 | 
						|
	border-top: solid 1px #aaa;
 | 
						|
	border-bottom: solid 1px #aaa;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.head {
 | 
						|
	border-top: solid 1px #aaa;
 | 
						|
	border-bottom: solid 1px #aaa;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.head div.head {
 | 
						|
	font-weight: bold;
 | 
						|
	color: black;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.foot {
 | 
						|
	border-top: solid 1px #aaa;
 | 
						|
        border-left: none;
 | 
						|
        border-right: none;
 | 
						|
        border-bottom: none;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.space {
 | 
						|
	border: none;
 | 
						|
}
 | 
						|
 | 
						|
table.ssdiff td.space div {
 | 
						|
	min-height: 3em;
 | 
						|
} |